RabbitMQ初探--用C#简单实现通信服务
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用(例如上篇文章说到的Thrift)的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
来,我们开始进入初探的大门。
第一步:
当然是下载相关东西。
因为RabbitMQ是由erlang实现的,所以需要先安装erlang。
下载erlang并安装,目前最新版本是21.0.1。
再下载RabbitMQ-server并安装,目前最新版本是3.7.7。
第二步:
用VisualStudio创建两个如下程序集(控制台程序),ConsumerClient(消费端)、ProducerClient(生产端)。
第三步:
两个程序集都用NuGet添加EasyNetQ引用,EasyNetQ是RabbitMQ官方封装好的一个组件,利用它可以更方便的使用RabbitMQ。当然EasyNetQ会依赖于RabbitMQ.Client,所以你添加EasyNetQ引用的同时,也会添加RabbitMQ.Client。
第四步:
编写具体代码:
ConsumerClient端中Program.cs部分代码为:
/// <summary>/// 主函数/// </summary>/// <param name="args"></param>static void Main(string[] args){IBus bus = RabbitHutch.CreateBus(string.Format("host={0}", "127.0.0.1:5672"));IAdvancedBus advancedBus = bus.Advanced;IExchange exChange = advancedBus.ExchangeDeclare("fanout_mq", "fanout");IQueue queue = advancedBus.QueueDeclare();advancedBus.Bind(exChange, queue, string.Empty);advancedBus.Consume(queue, registration => { registration.Add<string>((message, info) => { Console.WriteLine("接收到消息【{0}】", message.Body); }); });Console.ReadLine();}
ProducerClient端中Program.cs部分代码为:
/// <summary>/// 主函数/// </summary>/// <param name="args"></param>static void Main(string[] args){try{IBus bus = RabbitHutch.CreateBus(string.Format("host={0}", "127.0.0.1:5672"));IAdvancedBus advancedBus = bus.Advanced;IExchange exChange = advancedBus.ExchangeDeclare("fanout_mq", "fanout");new Action(() =>{for (int i = 0; i < 1000; i++){Thread.Sleep(1000);string message = "$$$$$$一号比较长的消息类型$$$$$$" + i;advancedBus.Publish(exChange, string.Empty, false, new Message<string>(message));Console.WriteLine("已发送消息【{0}】", message);}}).BeginInvoke(null, null);IExchange exChange2 = advancedBus.ExchangeDeclare("fanout_mq", "fanout");new Action(() =>{for (int i = 0; i < 2000; i++){Thread.Sleep(500);string message = "######二号短消息类型" + i;advancedBus.Publish(exChange2, string.Empty, false, new Message<string>(message));Console.WriteLine("已发送消息【{0}】", message);}}).BeginInvoke(null, null);}catch (Exception ex){Console.WriteLine(ex.Message);}Console.ReadLine();}
第五步:
执行程序,先执行ConsumerClient,再执行ProducerClient,测试一下,两个进程就通过这个消息队列达到通信的目的了,大功告成!
转载于:https://www.cnblogs.com/yuwuji/p/9305900.html
RabbitMQ初探--用C#简单实现通信服务相关推荐
- 基于消息中间件RabbitMQ实现简单的RPC服务
转载自 基于消息中间件RabbitMQ实现简单的RPC服务 RPC(Remote Procedure Call,远程过程调用),是一种计算机通信协议.对于两台机器而言,就是A服务器上的应用程序调用B ...
- Web服务初探:用Demo学Web服务系列(7)——XML的相关知识
我们前面的<Web服务初探:用Demo学Web服务系列>六个随笔中已经探讨完了C/S程序对Web Services的调用,大家感觉难吗?下面我们就有关的Web Services的原理讲解一 ...
- SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务)
2019独角兽企业重金招聘Python工程师标准>>> SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务) 一.大致介绍 微服务与微服务之间通过 ...
- RTC 融合通信服务架构与场景应用 | 2021稀土开发者大会音视频专场
导读: 5G 与 AI 技术推动音视频技术持续演进,RTC 技术在多个行业得到了充分应用,但各行业的业务有着不同的需求,因此就需要构建一套 RTC 融合通信服务系统,为产品的创新提供坚实的基础.本次分 ...
- RabbitMq初探——安装
rabbitmq Server安装 rabbitmq server安装很简单. 安装erlang环境 rpm -ihv erlang-18.1-1.el6.x86_64.rpm rpm -ihv ra ...
- 新的Azure通信服务(ACS)如何实现WebRTC?
正文字数:3144 阅读时长:4分钟 本文来自Housepaty的软件工程师Gustavo Garcia,他对Azure通信服务(ACS)进行了全面的评估,包括从浏览器兼容性.编解码器到带宽估计算法 ...
- 约三分之二的 DDoS 攻击指向通信服务提供商
百度智能云 云生态狂欢季 热门云产品1折起>>> 据网络安全公司 Nexusguard 2018年第三季度的 DDoS 威胁报告,该季度有66.5%的 DDoS 攻击指向通信服务 ...
- 构建简单的微服务架构
前言 本篇仅作引导,内容较多,如果阅读不方便,可以使用电脑打开我们的文档官网进行阅读.如下图所示: 文档官网地址:docs.xin-lai.com 目录 总体介绍 微服务架构的好处 微服务架 ...
- 消息(6)——WCF,构建简单的WCF服务,MTOM编码
构建一个简单的WCF服务. 以Web服务类似的步骤由IIS进行宿主服务.建立的步骤: 1 新建3.5网站 2 添加WCF服务,自动生成契约接口与实现,这里改动一下,添加个字串参数: [ServiceC ...
最新文章
- hdu5701-中位数计数
- vue基础整理-组件
- substring和charindex的使用注意
- JSON、Protobuf、Thrift、MessagePack 对比和开发指南
- MATLAB 牛顿迭代算法
- android 进度条 代码,Android 进度条使用详解及示例代码
- JS Statements var / let / const
- 李开复系列--成功、自信、快乐
- 部分用户称苹果iPad Air 5产品质量下降 外壳有异响
- 李飞飞李佳“逆风翻盘”:谷歌全新AutoML产品发布,AI客服规模化商用
- swoft php怎么样,[原创]Swoole和Swoft的那些事 (Http/Rpc服务篇)
- 对抗神经网络(一)——GAN
- RecyclerView添加分割线
- pip 切换清华镜像源
- 和99.9%的人的认知完全相反的富人思维
- Parse error: syntax error, unexpected ''解决办法
- 【增长的数字(仿支付宝资产数字)】
- 添加USB wifi驱动到RK3568
- Mybatis入门很难吗?
- 宝宝的成长脚印9/17