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. MongoDB 自己定义函数

    定义 db.system.js.insert({ _id : "TestConcat", value : function TestConcat(s1, s2){ return s ...

  2. Android经常使用设计模式(二)

    继上一篇 Android经常使用设计模式(一)里认识了观察者.适配器.代理等三种模式,这一篇将会解说下面三种模式: 工厂模式 单例模式 命令模式 1.工厂模式(Factory Pattern) 工厂模 ...

  3. NoSQL之Redis探析

    下载地址:wget http://download.redis.io/releases/redis-2.8.8.tar.gz安装steps:1 下载Official Website : http:// ...

  4. jquery源码学习笔记一:总体结构

    练武不练功,到老一场空.计算机也一样. 计算机的功,就是原理.如果程序员只会使用各种函数,各种框架,而不知其原理,顶多熟练工人而已.知其然,更要知其所以然. jquery我们用得很爽,但它究竟咋实现的 ...

  5. 2016/2/25 html+css学习资源

    html+css学习资源 1.Position is Everything,一个描述和展示在各种浏览器中发现的bug,并提供css解决方法的网站,顶! 2.一个国外的网页设计论坛 3.http://c ...

  6. 系统队列中的Windows错误报告

  7. FunsionCharts Demo

    原文路径:http://www.cnblogs.com/xuhongfei/archive/2013/04/12/3016882.html 一.简介 Ø FusionCharts 是InfoSoft  ...

  8. SetLocalTime API函数设置本地时间(DateTimeToSystemTime函数,把TDateTime转换成TSystemTime)

    procedure setLocalDateTime(Value: TDateTime);var  lSystemDateTime: TSystemTime;begin  DateTimeToSyst ...

  9. android锁屏软件制作

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mingyue_1128/article/details/33726515 转载请标明出处http:/ ...

  10. 常用的机器学习&数据挖掘知识点总结

    Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),ML ...