热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.Net下RabbitMQ发布订阅模式实践

一、概念AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的

一、概念
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/#/

.Net下RabbitMQ发布订阅模式实践

.Net下RabbitMQ发布订阅模式实践

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

三、.Net下开发RabbitMQ

1、配置Exchange以及Queue

  新建一个exchange,如下 所示:

.Net下RabbitMQ发布订阅模式实践

  新建一个queue,如下所示;

.Net下RabbitMQ发布订阅模式实践

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

.Net下RabbitMQ发布订阅模式实践

 

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、程序运行效果

.Net下RabbitMQ发布订阅模式实践

点击按钮之后,弹出了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)咨询.


推荐阅读
  • 分布式消息系统之Kafka集群部署
    kafka是基于发布订阅模式的一个分布式消息队列系统,用java语言研发,是ASF旗下的一个开源项目;类似的消息队列服务还有rabbitmq、activemq、zeromq;kaf ... [详细]
  • Python 硬盘容量单位及网络速率单位换算
    目标:    了解常见数据单位和数据速率的换算关系。数据单位的换算: ... [详细]
  • 自带启动:centos6.2自带安装mysql5.1,root身份登录(mysql-uroot-p)没有密码; ... [详细]
  • php数组能实现哪些数据结构数组就是典型的数据结构了,使用数组操作函数,就可以实现单向和多向队列了。操作函数有:array_shiftarray_unshiftarray_push ... [详细]
  • 题目:写一个函数返回参数二进制中1的个数方法1:我自己写的,运用‘%‘和‘‘,感觉挺简单的。intcount_one_bit(intnum){unsignedintcount0;w ... [详细]
  • 联邦学习: 联邦场景下的时空数据挖掘
    不论你望得多远,仍然有无限的空间在外边,不论你数多久,仍然有无限的时间数不清。——惠特曼《自己之歌》1.导引时空数据挖掘做为智慧城市的重要组成部分,和我们的日常生活息息相关。如我 ... [详细]
  • 安装pip3installpysnooper使用importpyspooner在要调用的函数前加上@pysnooper.snoo ... [详细]
  • 1.什么是B/S架构?什么是C/S架构 ... [详细]
  • 导读:很多朋友问到关于php站群怎么做的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 导读:今天编程笔记来给各位分享关于PHP的前端用什么工具的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 【剑指offer】11.二叉树的深度
    总目录:算法之旅导航目录 1.问题描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视 ... [详细]
  • 2018-04-30中国投行俱乐部史上最全区块链生态图谱,一张图看清2400个典型项目!前几日鲸准研究院推出了一张区块链的生态图谱,今天分享给大家,并解读图片各个部分的内容。区块链 ... [详细]
  • 数据采集_大数据采集:爬虫框架之WebMagic的基本使用
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据采集:爬虫框架之WebMagic的基本使用相关的知识,希望对你有一定的参考价值。 ... [详细]
  • EMQX工业物联网解决方案
    随着工业4.0概念的普及和在行业中实践越来越深入,传统工业改造和工业互联网化的需求也越来越强烈。其中包括了集中式控制向分散式增强型控制的基本模式转变,目标是建立一个高度灵活的个性化 ... [详细]
  • RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP,SMTP,STOMP,也 ... [详细]
author-avatar
风行汽车-赣州景通4S店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有