RabbitMQ四:生产者--队列--消费者
AMQP协议的梳理和名词解析
建议先把上篇AMQP协议先看一遍,理解一下,由于用XMind绘图,电脑屏幕比较小,不能截取全部,如果想要全图和源代码,请下面留言.......
可以点击图片,打开到新的页面查看,文字会清晰一点。。。。。


实例一:生产者-队列-消费者

P(Producer):生产者,意味着发送;
Queue:队列,本质上是一个无限的缓冲区,可以储存尽可能多的信息;
C(Consumer):消费者,等待并接收消息。
代码
简述:三部分,创建连接对象的公共帮助类库,一个发布者,一个消费者

MQConnnection代码单独封装一个类库:::
public class HelpConnection
{
private static IConnection Connection;
public static IConnection GetConnection()
{ if (Connection == null)
{
//创建连接工厂
var factory = new ConnectionFactory()
{
//计算机名称,账号,密码,
HostName = "localhost",
UserName = "zhangguangpo",
Password = "guangpo1992",
RequestedHeartbeat = 60,
AutomaticRecoveryEnabled = true //要启用自动连接恢复
};
//创建连接
Connection = factory.CreateConnection();
return Connection;
}
return Connection;
}
}
发布者:::
/// <summary>
/// 案例一::: 生产者--队列--消费者
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//创建一个渠道,会话
using (var channel = HelpConnection.GetConnection().CreateModel())
{
//参数:队列名称,是否持久,是否独家,自动删除,参数
//QueueDeclare(string queue,durable true,exclusive false,autoDelete false, IDictionary<string, object> arguments);
//声明一个队列
channel.QueueDeclare("hello", true, false, false, null);
string message = "Hello World 1";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", "hello", null, body);
Console.WriteLine("发布成功!!!");
Console.ReadKey();
}
}

消费者:::
(1)获取个人消息(“拉API”) 要检索单个消息,请使用IModel.BasicGet。
static void Main(string[] args)
{
using (var channel = HelpConnection.GetConnection().CreateModel())
{ //参数:队列名称,是否持久,是否独家,自动删除,参数
//QueueDeclare(string queue,durable true,exclusive false,autoDelete false, IDictionary<string, object> arguments);
//在消费者的类里面为什么会再次声明队列(channel.QueueDeclare())呢?-- 因为接收方可能会在发送方启动前启动,这是出于保险起见。
channel.QueueDeclare("hello", true, false, false, null); #region 获取个人消息(“拉API”)
//要检索单个消息,请使用IModel.BasicGet。返回的值是BasicGetResult的实例,可以从中提取头信息(属性)和消息体:
//noAck 可理解 是个消息标记,True:消息读取自动排除,下次不会读取到;false 消息没有排除,一直存在,
var result = channel.BasicGet("hello", True);
if (result == null)
{
Console.WriteLine("暂时没有消息");
}
else
{
var msg = Encoding.UTF8.GetString(result.Body);
Console.WriteLine(msg);
}
//确认收到消息
// channel.BasicAck(result.DeliveryTag, false);
#endregion
Console.ReadKey(); }
}

(2)通过订阅检索邮件(“推送API”)
static void Main(string[] args)
{
using (var channel = HelpConnection.GetConnection().CreateModel())
{
#region 通过订阅检索邮件(“推送API”)
//创建基于该队列的消费者,绑定事件
//我们即将告诉服务器将队列中的消息传递给我们。由于它将异步地推送我们的邮件,所以我们提供一个回调。
//那就是EventingBasicConsumer.Received事件处理程序。
var consumer = new EventingBasicConsumer(channel);
string msg = "";
consumer.Received += (model, e) =>
{
var body = e.Body; //消息主体
msg = Encoding.UTF8.GetString(e.Body);
Console.WriteLine("显示消息:" + msg);
};
//启动消费者 必须调用 IModel.BasicAck来确认您已成功接收并处理该消息:
channel.BasicConsume(queue: "hello", //队列名
noAck: true, //false:手动应答;true:自动应答
consumer: consumer);
#endregion
Console.ReadKey();
}
}
显示效果:一样一样的


- 博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!
- 小弟刚迈入博客编写,文中如有不对,欢迎用板砖扶正,希望给你有所帮助。
RabbitMQ四:生产者--队列--消费者的更多相关文章
- RabbitMQ的生产者和消费者
低级错误:启动程序的时候报错:socket close: 原因在配置文件中写的端口是:15672,应该是5672: client端通信口5672管理口15672server间内部通信口25672erl ...
- python+rabbitMQ实现生产者和消费者模式
(一)安装一个消息中间件,如:rabbitMQ (二)生产者 sendmq.py import pika import sys import time # 远程rabbitmq服务的配置信息 user ...
- RabbitMQ五:生产者--队列--多消费者
一.生成者-队列-多消费者(前言) 上篇文章,我们做了一个简单的Demo,一个生产者对应一个消费者,本篇文章就介绍 生产者-队列-多个消费者,下面简单示意图 P 生产者 C 消费者 中间队列 ...
- 十五、.net core(.NET 6)搭建RabbitMQ消息队列生产者和消费者的简单方法
搭建RabbitMQ简单通用的直连方法 如果还没有MQ环境,可以参考上一篇的博客,在windows系统上的rabbitmq环境搭建.如果使用docker环境,可以直接百度一下,应该就一个语句就可以搞定 ...
- [b0029] python 归纳 (十四)_队列Queue实现生产者消费者
# -*- coding: UTF-8 -*- """ 多线程的生产者,消费者 使用队列Queue """ import Queue imp ...
- 消息中间件——RabbitMQ(五)快速入门生产者与消费者,SpringBoot整合RabbitMQ!
前言 本章我们来一次快速入门RabbitMQ--生产者与消费者.需要构建一个生产端与消费端的模型.什么意思呢?我们的生产者发送一条消息,投递到RabbitMQ集群也就是Broker. 我们的消费端进行 ...
- 守护进程,互斥锁,IPC,队列,生产者与消费者模型
小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某 ...
- Windows下RabbitMQ 的下载、配置、Java实现生产者和消费者例子
RabbitMQ是一个轻量级的消息代理中间件,支持多种消息通信协议,支持分布式部署,支持运行于多个操作系统,具有灵活.高可用等特性.RabbitMQ支持多种协议,其中最为重要的是高级消息队列协议(AM ...
- RabbitMQ学习笔记(三、生产者与消费者)
目录: 细说交换器 细说队列 发送消息 消费消息 确认与拒绝 细说交换器: 1.方法: public AMQP.Exchange.DeclareOk exchangeDeclare(String ex ...
随机推荐
- 西门子PLC学习笔记六-(Step7指令简单介绍)
1.指令操作数 指令操作数由操作标示符和參数组成. 操作标识符由主标识符和辅标识符组成. 主标识符有:I(输入过程影像寄存器).Q(输出过程映像寄存器).M(位寄存器).PI(外部输入寄存器).PQ( ...
- 使用python在极坐标中生成一条直线
在测试雷达时,往往需要测试雷达的数据是否准确,这时就需要在雷达图中显示一条标准的直线作为对比. "create a wall" import numpy as np import ...
- 适合初学C语言是练习的代码
作为一个小白,自己学C的时候就想找些代码练练手,就整理了一些. 1.最大公约数和最小公倍数 # include <stdio.h> int main(void) { int i, ...
- 【iOS系列】- 通知NSNotification的使用
[iOS系列]- 通知NSNotification的使用 1:属性 通知属性: - (NSString *)name; // 通知的名称 - (id)object; // 通知发布者(是谁要发布通知) ...
- 树莓派 mongodb 安装&报错处理
树莓派 mongodb 安装&报错处理 编译过的源码下载地址: http://files.cnblogs.com/files/xueshanshan/mongodb-rpi.zip addus ...
- asp.net listview 实现分页浏览效果
页面代码: <div style="margin-top:0px;">共<asp:Label ID="lb_count" runat=&quo ...
- XMU 1615 刘备闯三国之三顾茅庐(三) 【欧拉函数+快速幂+欧拉定理】
1615: 刘备闯三国之三顾茅庐(三) Time Limit: 1000 MS Memory Limit: 128 MBSubmit: 45 Solved: 8[Submit][Status][W ...
- rabbitmq kafka storm
rabbitmq:实时消息传递 kafka:消息的持久化 storm:使用拓扑逻辑进行
- jQuery简单纯文字提示条
如何制作jQuery简单纯文字提示条,先介绍提示条(tooltip)的意思是用户鼠标悬停经过事件发生提示title.它们已经呈现在大多数浏览器中,当你可以提供一个链接或图片的title属性,就是用户将 ...
- [noip模拟赛]小U的女装
https://www.zybuluo.com/ysner/note/1329304 题面 有一张\(n\)点\(m\)边的.不一定联通的无向图. 如果选了一条边,就不能选其两个端点. 现在同时选点和 ...