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. #define中的#和##作用

    #define语句中的#是把参数字符串化,##是连接两个参数成为一个整体. #define FACTORY_REF(name) { #name, Make##name } 中#name就是将传入的na ...

  2. UICollectionView 具体解说学习

    UICollectionView 和UITableView非常像,是APPLE公司在iOS 6后推出的用于处理图片这类UITableView 布局困难的控件,和UITableView 一样,它也有自己 ...

  3. Ctags基本配置

    一般linux系统都会自带ctags,也可输入"ctags"看有木有该命令.有的话速度配置吧,没有话yum install ctags安装吧. 打开vim 配置文件,要是没该文件就 ...

  4. Java基础学习之final和多态及类型转换

    finalkeyword: finalkeyword是终于的意思,能够修饰类,成员变量,成员方法. •    修饰类,类不能被继承 •    修饰变量,变量就变成了常量,仅仅能被赋值一次. •    ...

  5. VS2013如何调用别人发布的WebService程序

    这篇经验会告诉我们如何调用别人发布的WebService,并且需要注意的事项.现在就拿获取天气预报的接口举例,因为文中不允许有链接,所以在下文图中有WebService链接的地址. 工具/原料 VS2 ...

  6. idea导出配置

  7. ARM WFI和WFE指令【转】

    本文转载至:http://www.wowotech.net/armv8a_arch/wfe_wfi.html 1. 前言 蜗蜗很早以前就知道有WFI和WFE这两个指令存在,但一直似懂非懂.最近准备研究 ...

  8. YTU 2845: 编程题AB-卡片游戏

    2845: 编程题AB-卡片游戏 时间限制: 1 Sec  内存限制: 128 MB 提交: 30  解决: 13 题目描述 小明对数字的序列产生了兴趣: 现有许多张不同的数字卡片,用这若干张卡片能排 ...

  9. YTU 2975: 我的编号

    2975: 我的编号 时间限制: 1 Sec  内存限制: 128 MB 提交: 42  解决: 15 题目描述 建立一个学生链表,每个链表结点含有学生的基本信息,编号和姓名.现在n个学生站成一列,根 ...

  10. 主机与虚拟机互ping

    1.设置虚拟机网络连接方式(如下图): 2.设置主机和虚拟机的ip为同一个网段,如主机ip:192.168.28.1,虚拟机ip:192.168.28.128 3.如果相互还是ping不通,就检查一下 ...