如何在 C# 中使用 RabbitMQ
譯文鏈接: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的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 一套标准的ASP.NET Core容器化
 - 下一篇: 在传统行业做数字化转型之业务篇