译文链接:https://www.infoworld.com/article/3200210/how-to-work-with-rabbitmq-in-c.html

RabbitMQ 是一个非常流行的,开源的,使用Erlang语言编写的框架,通常在电信级平台中作为消息中间件使用,RabbitMQ实现了高级的AMQP协议用于实现进程间,应用程序间,服务器之间的消息交互,而且它还有一个非常????????的特性,你可以使用自定义插件来扩展RabbitMQ的功能,而且它还支持多协议,高性能,高可靠,集群以及高可用队列。

创建队列的方式也多种多样,你可以编码创建,也可以通过管理员用户界面,甚至通过 PowerShell 进行队列创建。

RabbitMQ 术语

当你在用 RabbitMQ 时,你要理解下面两个术语

  • 队列是一个数据结构上的概念,支持 FIFO 特性,在本文中,消息队列就是一个可以存放消息的巨大缓存。

  • producer(生产者) 的使命是生成数据并推送到队列的一种角色组件,consumer(消费者)它能够从存储消息的队列中提取数据进行消费,生产者-消费者 是并行编程中非常流行的设计模式之一。

安装和启动

安装 RabbitMQ 是非常简单的,在安装之前,你需要先安装 Erlang,根据你的操作系统选择正确版本呢的 Erlang,下载地址:https://www.erlang.org/downloads  ,然后继续下载安装 RabbitMQ Server ,下载地址:https://www.rabbitmq.com/download.html

用 C# 构建 RabbitMQ

现在 Erlang 和 RabbitMQ 已经成功安装到你的windows上,如果想和 Rabbitmq Server 进行交互,你需要安装一个 RabbitMQ .NET client , 可以用 NuGet Package Manager 控制台去安装 RabbitMQ Client。

在 Visual Studio 中新建一个 Console Application,然后通过 NuGet Package Manager 安装 RabbitMQ.Client 开发包,假定 RabbitMQ Server 是运行在本机,下面的代码片段创建了一个和 RabbitMQ Server 交互的 Connection 连接,代码如下:


ConnectionFactory connectionFactory = new ConnectionFactory();
IConnection connection = connectionFactory.CreateConnection();

现在再次假定 RabbitMQ 跑在远程服务器上,下面的方法返回了一个通往 Rabbitmq Service 的 Connection 连接。


public IConnection GetConnection(string hostName, string userName, string password){ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.HostName = hostName;connectionFactory.UserName = userName;connectionFactory.Password = password;return connectionFactory.CreateConnection();}

发送和接收消息

现在 RabbitMQ Service 已经在本地正常运行,使用下面的方法向队列发送消息,请注意通往 RabbitMQ Service 的 Connection 用的是默认配置。


public static void Send(string queue, string data){using (IConnection connection = new ConnectionFactory().CreateConnection()){using (IModel channel = connection.CreateModel()){channel.QueueDeclare(queue, false, false, false, null);channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));}}}

channel 常用于和 server 进行通讯从而发送和接收消息,不过上面这种队列是不持久的,为啥这么说呢?因为我在 QueueDeclare 方法的第二个参数中设置了 false,所以送往这个 queue 的 message 只会存留于内存中,一旦 server 重启,这个数据将会丢失。

下面的代码展示了如何从 queue 中消费数据。

public static void Receive(string queue){using (IConnection connection = new ConnectionFactory().CreateConnection()){using (IModel channel = connection.CreateModel()){channel.QueueDeclare(queue, false, false, false, null);var consumer = new EventingBasicConsumer(channel);BasicGetResult result = channel.BasicGet(queue, true);if (result != null){string data =Encoding.UTF8.GetString(result.Body);Console.WriteLine(data);}}}}

接下来的代码片段展示了如何使用 Send 和 Receive 方法进行数据的发送和消费。


static void Main(string[] args)
{Send("IDG","Hello World!");Receive("IDG");Console.ReadLine();
}

值得一提的是:RabbitMQ 对持久化也提供了非常好的支持,有两种模式的 queue 可供选择:持久化和非持久化,如果采用持久化模式,消息是存放在硬盘中的,反之非持久化的模式,数据仅仅存放于内存中,一旦server重启,非持久化模式的队列数据将会丢失,最后补充一下,持久化可以用于以下三个级别上:Queue,Exchange 和 Message。

如何在 C# 中使用 RabbitMQ相关推荐

  1. 软件部署在不同linux上,如何在Linux中安装和部署keepalived

    如何在Linux中安装和部署keepalived 发布时间:2020-05-27 13:56:19 来源:亿速云 阅读:407 作者:鸽子 keepalived的部署 keepalived在很多高可用 ...

  2. php自动收货,如何在PHP中实现一个订单自动确认收货的redis队列

    如何在PHP中实现一个订单自动确认收货的redis队列 发布时间:2020-12-14 15:45:55 来源:亿速云 阅读:65 作者:Leah 本篇文章为大家展示了如何在PHP中实现一个订单自动确 ...

  3. 居然还有人不知道如何在 IDEA 中生成 Maven 依赖关系图?

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  4. 如何在SharePoint2010中添加Deep Zoom Image

    如何在SharePoint2010中添加Deep Zoom Image 应用范围 SharePoint 2010 Foundation:SharePoint 2010 Standard:SharePo ...

  5. php如何对数组进行分组,如何在PHP中对数组进行分组排序

    如何在PHP中对数组进行分组排序 发布时间:2021-01-04 16:28:51 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关如何在PHP中对数组进行分组排序,文章内容质量 ...

  6. html中section与div,如何在html中的section标签内包含div标签

    我正在制作一个完整版块的页面网站,如this.每个页面都有自己的标签.目前我的网页有4个部分(呈现不同的背景颜色).如何在html中的section标签内包含div标签 我的第一部分有一个容器div, ...

  7. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  8. 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值

    如何在OpenCV中为InRange阈值选择颜色的最佳HSV值 1. 效果图 2. 源码 参考 之前的博客介绍了如何使用Python,OpenCV通过HSV颜色空间转换检测对象,并进行轨迹追踪.怎么选 ...

  9. 管理 zabbix_Zabbix 2019 峰会丨看睿象云如何在 Zabbix 中玩转告警

    2019年11月29日-30日,为期两天的 Zabbix 大会中国站在北京盛大召开,本届 Zabbix 大会以"新视界,新技术,共建未来新监控!"为主题,为与会人员提供前沿的监控技 ...

最新文章

  1. 算法(4)数据结构:堆
  2. KnockoutJS + My97DatePicker
  3. spring电子书_不懂Spring就彻底放Java吧
  4. linux nload_Linux nload命令
  5. JSP教程第7、8讲笔记
  6. SQL教程——连接查询之SQL99标准
  7. 支付宝拿技术开刀把扫码无情地革掉
  8. 【 PG 入门系列 】PostgreSQL的客户端工具(五)
  9. SYNPROXY抵御DDoS攻击的原理和优化
  10. 高品质摄影作图台式计算机推荐,摄影后期做图用什么电脑
  11. tp6后台管理系统搭建
  12. 广州华锐互动产品3d展示平台,轻松提高产品成交!
  13. 故意伤害罪具体会有什么处罚
  14. (详细)解决hive报错FAILED: SemanticException Cartesian products are disabled for safety的问题
  15. 学术期刊数据库---EBSCO
  16. python中元组常识,以及for 与 range 的用法!
  17. 淘宝订单接口|订单插旗备注,淘宝开放平台最稳定的店铺订单接口
  18. CString源代码
  19. 什么是Java面向对象OOP
  20. mySQL 2502 2503错误

热门文章

  1. Git删除分支/恢复分支
  2. JQuery框架2.位置属性|筛选方法|事件
  3. jQuery 属性和CSS
  4. 教你如何在Android 6.0上创建系统悬浮窗
  5. Navicat 远程连接ubuntu出现的问题
  6. http协议--笔记
  7. 利用WebBrowser实现Web打印的分析
  8. eclipse_中的注释_快捷键
  9. oracle服务器不识别tc服务,记一次ORACLE无法启动登陆事故
  10. 三年级计算机击键要领教案,闽教版信息技术三上《下行键操作》教案