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四:生产者--队列--消费者的更多相关文章

  1. RabbitMQ的生产者和消费者

    低级错误:启动程序的时候报错:socket close: 原因在配置文件中写的端口是:15672,应该是5672: client端通信口5672管理口15672server间内部通信口25672erl ...

  2. python+rabbitMQ实现生产者和消费者模式

    (一)安装一个消息中间件,如:rabbitMQ (二)生产者 sendmq.py import pika import sys import time # 远程rabbitmq服务的配置信息 user ...

  3. RabbitMQ五:生产者--队列--多消费者

    一.生成者-队列-多消费者(前言) 上篇文章,我们做了一个简单的Demo,一个生产者对应一个消费者,本篇文章就介绍 生产者-队列-多个消费者,下面简单示意图 P 生产者    C 消费者  中间队列 ...

  4. 十五、.net core(.NET 6)搭建RabbitMQ消息队列生产者和消费者的简单方法

    搭建RabbitMQ简单通用的直连方法 如果还没有MQ环境,可以参考上一篇的博客,在windows系统上的rabbitmq环境搭建.如果使用docker环境,可以直接百度一下,应该就一个语句就可以搞定 ...

  5. [b0029] python 归纳 (十四)_队列Queue实现生产者消费者

    # -*- coding: UTF-8 -*- """ 多线程的生产者,消费者 使用队列Queue """ import Queue imp ...

  6. 消息中间件——RabbitMQ(五)快速入门生产者与消费者,SpringBoot整合RabbitMQ!

    前言 本章我们来一次快速入门RabbitMQ--生产者与消费者.需要构建一个生产端与消费端的模型.什么意思呢?我们的生产者发送一条消息,投递到RabbitMQ集群也就是Broker. 我们的消费端进行 ...

  7. 守护进程,互斥锁,IPC,队列,生产者与消费者模型

    小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某 ...

  8. Windows下RabbitMQ 的下载、配置、Java实现生产者和消费者例子

    RabbitMQ是一个轻量级的消息代理中间件,支持多种消息通信协议,支持分布式部署,支持运行于多个操作系统,具有灵活.高可用等特性.RabbitMQ支持多种协议,其中最为重要的是高级消息队列协议(AM ...

  9. RabbitMQ学习笔记(三、生产者与消费者)

    目录: 细说交换器 细说队列 发送消息 消费消息 确认与拒绝 细说交换器: 1.方法: public AMQP.Exchange.DeclareOk exchangeDeclare(String ex ...

随机推荐

  1. LeetCode 168 Excel Sheet Column Title(Excel的列向表标题)

    翻译 给定一个正整数,返回它作为出如今Excel表中的正确列向标题. 比如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 - ...

  2. python实现接口自动化

    一.总述 Postman:功能强大,界面好看响应格式自主选择,缺点支持的协议单一且不能数据分离,比较麻烦的还有不是所有的公司都能上谷歌SoupUI:支持多协议(http\soup\rest等),能实现 ...

  3. MYSQL 增加字段不报错,插入数据不报错处理

    ') ON DUPLICATE KEY UPDATE sort_name = "vipset"; 重点在 ON DUPLICATE KEY UPDATE sort_name = & ...

  4. LuaInterface简单介绍

    LuaInterface简单介绍 Lua是一种非常好的扩展性语言.Lua解释器被设计成一个非常easy嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)Lua f ...

  5. Python开发【第2节】【Python运算符】

    Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 1.算术运算符 假设变量a = 10,变量b = 21: ...

  6. android各种菜单使用介绍

    Android菜单的有这几种: 1,OptionMenue:选项菜单 2,contextMenu:上下文菜单 3,SubMenu子菜单 其中,OptionMenue与contextMenu的区别(Op ...

  7. js连等运算

    1.var a = b = 20; 连等的第二个变量属于全局变量2.a.x = a = {n:2}; 连等是从右往左执行的3.a.x = a = {n:2}; js语句执行前会保存之前的索引

  8. bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖

    首先我写了个凸包就溜了 这是最小圆覆盖问题,今晚学了一下 先随机化点,一个个加入 假设当前圆心为o,半径为r,加入的点为i 若i不在圆里面,令圆心为i,半径为0 再重新从1~i-1不停找j不在圆里面, ...

  9. 我的vim 配置——nerdtree、ack vim、vim sneak

    set nu colorscheme darkblue syntax on " set term=xterm " 设置终端类型 set nonumber " 是否显示行号 ...

  10. hdu-4118 Holiday's Accommodation(树形dp+树的重心)

    题目链接: Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 200000/200000 ...