一、概念
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. 【SHARE】WEB前端学习资料

    参考资料:https://github.com/karlhorky/learn-to-program 学习网站:http://www.codecademy.com/learn https://www. ...

  2. 深入理解JVM - 晚期(运行期)优化

    在部分商用虚拟机中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code) ...

  3. python Tkinter之Button

    Button小部件是一个标准的Tkinter的部件,用于实现各种按钮.按钮可以包含文本或图像,您可以调用Python函数或方法用于每个按钮. Tkinter的按钮被按下时,会自动调用该函数或方法. 该 ...

  4. python3操作mysql数据库增删改查

    #!/usr/bin/python3 import pymysql import types db=pymysql.connect("localhost","root&q ...

  5. IDT 数据预览查询

    前面做了一件非常愚蠢的事情,由于不会预览数据.我都是直接发布到webi去查看的.可以想象一下了.真是太年轻了.为自己感到十分的汗颜. 在数据基础层做好连接之后,可以查看数据基础 .会显示相应的join ...

  6. io.js的六大新特性

    io.js是nodejs的友好版的分支("friendly fork”).它支持npm中所有的同样模块,且使用了v8最新版本的截取(v8是被node.js使用js解释器),且修复了很多的bu ...

  7. kylin_学习_00_资源帖

    一.官方资料 1.官方文档 kylin官方文档(中文) 2.kylin的安装 Hadoop 环境搭建 kylin安装向导 二.参考资料 1.分布式大数据多维分析(OLAP)引擎Apache Kylin ...

  8. BEC listen and translation exercise 42

    These were built for the workers towards the end of the eighteenth century, and they are still furni ...

  9. PS 滤镜——水波 water wave

    %%%% Water wave %%%% 制作水波效果 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Process ...

  10. [BZOJ1396&2865]识别子串

    bzoj1396 bzoj2865 dbzoj1396 dbzoj2865 题面 XX在进行字符串研究的时候,遇到了一个十分棘手的问题. 在这个问题中,给定一个字符串\(S\),与一个整数\(K\), ...