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. 在开发过程中,如何在手机上测试vue-cli构建的项目

    由于有时候谷歌手机调试与真是的手机环境还是有一定的差距,所以需要在手机上测试项目. 手机上测试vue-cli构建项目方法: 打开项目config/index.js文件,找到module.exports ...

  2. Swift String 一些经常用法

    直接上代码 //字符串 //1 推断字符串是否为空 var test1Str="" var test1Str2:String = String(); println("t ...

  3. 蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 【原创,多图】

    蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 [原创,多图] spm=a1z10.1.w4004-5319414070.11.Zd ...

  4. Thinkpad升级Window10无法安装expresscache

    本人有一台Thinkpad T440s,自从看了这篇帖子12秒开机!ExpressCache SSD缓存加速,就给自己的小黑加持了一块固态硬盘.使用后效果确实很明显. 问题 自从系统自动升级到wind ...

  5. 嵌入式驱动开发之--- 虚拟磁盘SBULL块设备驱动程序分析

     #define SBULL_MINORS  16         /* 每个sbull设备所支持的次设备号的数量 */  #define KERNEL_SECTOR_SIZE 512  // 本地定 ...

  6. 【iOS开发】-NSString的扩展使用

    第一:基本数据类型与字符串转换 //基本数据类型(int float,double char) 1)基本数据类型->NSString //1.int类型换换成字符串 int a = 88; NS ...

  7. 百度Fex webuploader.js上传大文件失败

    项目上用百度webuploader.js上传文件,option选项里面已经设置单个文件大小,但是上传低于此阈值的文件时仍然不成功. 我现在的理解是,框架是将文件post到后台服务器端的.. 百度发现是 ...

  8. vue学习1

    1.<div id="app">{{message}}<input v-model="message"></div>new ...

  9. USACO44 TimeTravel 时间旅行(链表)

    第一眼看到这题,woc,这不是主席树!?旁边HZ也表示同意,然后cGh队长就慢悠悠的过来:“想什么,USACO会有主席树!?” ↓打脸不解释,大家可以去%ta的博客(这样ta就不会D飞我了~)http ...

  10. POJ3177 Redundant Paths —— 边双联通分量 + 缩点

    题目链接:http://poj.org/problem?id=3177 Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total ...