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#简单实现通信服务相关推荐

  1. 基于消息中间件RabbitMQ实现简单的RPC服务

    转载自  基于消息中间件RabbitMQ实现简单的RPC服务 RPC(Remote Procedure Call,远程过程调用),是一种计算机通信协议.对于两台机器而言,就是A服务器上的应用程序调用B ...

  2. Web服务初探:用Demo学Web服务系列(7)——XML的相关知识

    我们前面的<Web服务初探:用Demo学Web服务系列>六个随笔中已经探讨完了C/S程序对Web Services的调用,大家感觉难吗?下面我们就有关的Web Services的原理讲解一 ...

  3. SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务)

    2019独角兽企业重金招聘Python工程师标准>>> SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务) 一.大致介绍 微服务与微服务之间通过 ...

  4. RTC 融合通信服务架构与场景应用 | 2021稀土开发者大会音视频专场

    导读: 5G 与 AI 技术推动音视频技术持续演进,RTC 技术在多个行业得到了充分应用,但各行业的业务有着不同的需求,因此就需要构建一套 RTC 融合通信服务系统,为产品的创新提供坚实的基础.本次分 ...

  5. RabbitMq初探——安装

    rabbitmq Server安装 rabbitmq server安装很简单. 安装erlang环境 rpm -ihv erlang-18.1-1.el6.x86_64.rpm rpm -ihv ra ...

  6. 新的Azure通信服务(ACS)如何实现WebRTC?

    正文字数:3144  阅读时长:4分钟 本文来自Housepaty的软件工程师Gustavo Garcia,他对Azure通信服务(ACS)进行了全面的评估,包括从浏览器兼容性.编解码器到带宽估计算法 ...

  7. 约三分之二的 DDoS 攻击指向通信服务提供商

    百度智能云 云生态狂欢季 热门云产品1折起>>>   据网络安全公司 Nexusguard 2018年第三季度的 DDoS 威胁报告,该季度有66.5%的 DDoS 攻击指向通信服务 ...

  8. 构建简单的微服务架构

    前言 本篇仅作引导,内容较多,如果阅读不方便,可以使用电脑打开我们的文档官网进行阅读.如下图所示: 文档官网地址:docs.xin-lai.com 目录 总体介绍   微服务架构的好处    微服务架 ...

  9. 消息(6)——WCF,构建简单的WCF服务,MTOM编码

    构建一个简单的WCF服务. 以Web服务类似的步骤由IIS进行宿主服务.建立的步骤: 1 新建3.5网站 2 添加WCF服务,自动生成契约接口与实现,这里改动一下,添加个字串参数: [ServiceC ...

最新文章

  1. hdu5701-中位数计数
  2. vue基础整理-组件
  3. substring和charindex的使用注意
  4. JSON、Protobuf、Thrift、MessagePack 对比和开发指南
  5. MATLAB 牛顿迭代算法
  6. android 进度条 代码,Android 进度条使用详解及示例代码
  7. JS Statements var / let / const
  8. 李开复系列--成功、自信、快乐
  9. 部分用户称苹果iPad Air 5产品质量下降 外壳有异响
  10. 李飞飞李佳“逆风翻盘”:谷歌全新AutoML产品发布,AI客服规模化商用
  11. swoft php怎么样,[原创]Swoole和Swoft的那些事 (Http/Rpc服务篇)
  12. 对抗神经网络(一)——GAN
  13. RecyclerView添加分割线
  14. pip 切换清华镜像源
  15. 和99.9%的人的认知完全相反的富人思维
  16. Parse error: syntax error, unexpected ''解决办法
  17. 【增长的数字(仿支付宝资产数字)】
  18. 添加USB wifi驱动到RK3568
  19. Mybatis入门很难吗?
  20. 宝宝的成长脚印9/17

热门文章

  1. JVM空间申请流程图
  2. [转] Bookmarklet(书签工具)编写指南
  3. 算法系列15天速成——第十三天 树操作【下】
  4. Mono 2.0正式发布了
  5. dagger android 学习(二):AndroidInjector的使用
  6. flink写入hive的时区问题
  7. hive中操作struct与map三例
  8. GenericUDAF使用流程记载(转载+自己整理)
  9. google drive的压缩包直接解压到google drive
  10. groupby的用法