一、概念
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。(很多信息网上都有,大伙可以自己去看看)

二、Linux安装RabbitMQ(基于CentOS7)

1、erlang安装

rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
yum install erlang

  

2、安装RabbitMQ

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el7.noarch.rpm
yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm
service rabbitmq-server start

  

3、配置RabbitMQ配置文件

   首次安装需要自己创建配置文件

cd /etc/rabbitmq/
vim rabbitmq.config

   写入以下内容:

[{rabbit, [{loopback_users, []}]}].

这样就可以用guest进行远程访问了,更加详细的信息,大家自己再百度百度,如何不能访问的话,可以尝试关闭防火墙再试试

4、开启管理UI

rabbitmq-plugins enable rabbitmq_management

开启后访问以下地址:

http://192.168.10.97:15672/#/

通过这个UI工具可以更好的管理RabbitMQ

三、.Net下开发RabbitMQ

1、配置Exchange以及Queue

  新建一个exchange,如下 所示:

  新建一个queue,如下所示;

  创建exchange以及queue的对应关系:

2、接收端代码

        private void Form2_Load(object sender, EventArgs e)
{
var factory = new ConnectionFactory();
factory.UserName = "guest";
factory.Password = "guest";
factory.HostName = "192.168.10.97";
factory.AutomaticRecoveryEnabled = true;
var connection = factory.CreateConnection(); var channel = connection.CreateModel(); var consumer = new RabbitMQ.Client.Events.EventingBasicConsumer(channel);
consumer.ConsumerTag = "11111111111";
consumer.Received += Consumer_Received;
channel.BasicConsume(queue: "hello",
noAck: true,
consumer: consumer);
} private void Consumer_Received(object sender, RabbitMQ.Client.Events.BasicDeliverEventArgs e)
{
MessageBox.Show(Encoding.UTF8.GetString(e.Body));
}

  

 PS:特别注意AutomaticRecoveryEnabled树形必须设置为true,否则再接收到一次数据后,后面就不会再接收到数据了(被这个坑了一天)

3、发送端代码

 private void button1_Click(object sender, EventArgs e)
{
var factory = new ConnectionFactory();
factory.UserName = "guest";
factory.Password = "guest";
factory.HostName = "192.168.10.97";
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.BasicPublish("hello_e", "hello", null, Encoding.UTF8.GetBytes(DateTime.Now.ToString()));
}
}
}

 4、程序运行效果

点击按钮之后,弹出了messagebox,证明数据监听到了,有些时候大概有几秒的延迟,不过本身异步处理主要是保证最终一致性,所以也无所谓

源码下载地址:https://pan.baidu.com/s/1nvhp0MH

如部分文档有侵权,请联系:568898448

参考文档:安装过程参考http://www.cnblogs.com/uptothesky/p/6094357.html

作者: 因致研发官方博客

出处: http://www.cnblogs.com/yizitrd/>

关于公司:专注制造业MES系统,也开始涉足工业互联网相关

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(hongjb@yizit.com)咨询.

.Net下RabbitMQ发布订阅模式实践的更多相关文章

  1. RabbitMQ 发布订阅

    互联网公司对消息队列是深度使用者,因此需要我们了解消息队列的方方面面,良好的设计及深入的理解,更有利于我们对消息队列的规划. 当前我们使用消息队列中发现一些问题: 1.实际上是异步无返回远程调用,由发 ...

  2. Go RabbitMQ(三)发布订阅模式

    RabbitMQ 在上一节中我们创建了工作队列,并且假设每一个任务都能够准确的到达对应的worker.在本节中我们将介绍如何将一个消息传递到多个消费者,这也就是所说的发布订阅模式 为了验证该模式我们使 ...

  3. RabbitMQ指南之三:发布/订阅模式(Publish/Subscribe)

    在上一章中,我们创建了一个工作队列,工作队列模式的设想是每一条消息只会被转发给一个消费者.本章将会讲解完全不一样的场景: 我们会把一个消息转发给多个消费者,这种模式称之为发布-订阅模式. 为了阐述这个 ...

  4. RabbitMQ六种队列模式-发布订阅模式

    前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅 [本文]RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...

  5. RabbitMQ入门学习系列(四) 发布订阅模式

    发布订阅模式 什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道 ...

  6. RabbitMQ学习第三记:发布/订阅模式(Publish/Subscribe)

    工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有 ...

  7. RabbitMQ/JAVA (发布/订阅模式)

    发布/订阅模式即生产者将消息发送给多个消费者. 下面介绍几个在发布/订阅模式中的关键概念-- 1. Exchanges (转发器) 可能原来我们都是基于一个队列发送和接收消息.现在介绍一下完整的消息传 ...

  8. python使用rabbitMQ介绍三(发布订阅模式)

    一.模式介绍 在前面的例子中,消息直接发送到queue中. 现在介绍的模式,消息发送到exchange中,消费者把队列绑定到exchange上. 发布-订阅模式是把消息广播到每个消费者,每个消费者接收 ...

  9. 《JavaScript设计模式与开发实践》笔记第八章 发布-订阅模式

    第八章 发布-订阅模式 发布-订阅模式描述 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. 发布-订阅模式可以广泛应用于 ...

随机推荐

  1. 图片加载ImageLoader

    https://github.com/nostra13/Android-Universal-Image-Loader public class AtguiguApplication extends A ...

  2. rails常用函数

    1.rails g controller Users rails g model User 2.user.reload.email reload 使用数据库中的数据重新加载对象

  3. ios 微信发送位置

    @interface GroupReportViewController () <BMKMapViewDelegate,BMKLocationServiceDelegate,BMKGeoCode ...

  4. UVA 101 vector

    题目链接 白书上的例题,关于vector的使用.不定长数组vector,类型内部封装了一些常用操作.vector就像一个二维数组,只有第一维的大小是固定的,可以像数组一样访问到其中的每一个元素. ve ...

  5. linux限制用户内存使用

    最近有内存使用报警的邮件发出,之后杀掉了内存占用高的进程,使内存恢复正常 但是发现某些程序被杀掉了,有过怀疑是被人手动杀掉的,看日志后发现应该是内存占用过大,系统自动杀掉的 内存耗尽会调用oom 对进 ...

  6. java深入探究02

    web前端 html javascript Dom,BOM xml css Bootstrap

  7. Echarts 地图(map)插件之 省份的颜色自定义

    ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11 ...

  8. HTML5学习记录——3

    HTML媒体 1.HTML多媒体 视频格式 .avi    微软开发 .wmv  微软开发 .mpg  .mpeg .mov 苹果公司开发 .rm  .ram  允许低带宽的视频流 .swf  .fl ...

  9. 浏览器访问web站点原理图

    启动tomcat,在浏览器中输入http://localhost:8080/web_kevin/hello.html,发生的事情如下: 1.浏览器解析主机名,即解析localhost.浏览器首先会到本 ...

  10. 文件操作类(QFileDialog、QFileInfo、QDir、QDirIterator、QFile)

    一.QFileDialog 用于弹出打开或保存对话框,然后返回选择的文件或文件夹 1.可以筛选所需要的文件类型 2.可以设置是否多选 3.可以设置保存还是打开 二.QFileInfo 保存了文件相关信 ...