EasyNetQ操作RabbitMQ
生活随笔
收集整理的這篇文章主要介紹了
EasyNetQ操作RabbitMQ
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
EasyNetQ 是一個容易使用,專門針對RabbitMQ的 .NET API。EasyNetQ是為了提供一個盡可能簡潔的適用與RabbitMQ的.NET類庫。
下面看下怎么集成。
1、nuget 安裝
2、配置連接串
public?static?IBus?CreateMessageBus(){//?消息服務器連接字符串var?connectionString?=?ConfigurationManager.ConnectionStrings["RabbitMQConnString"];if?(connectionString?==?null?||?connectionString.ConnectionString?==?string.Empty){throw?new?Exception("messageserver?connection?string?is?missing?or?empty");}return?RabbitHutch.CreateBus(connectionString.ConnectionString);}3、這邊我們構建一個消息體
///?<summary>///?消息類實體///?</summary>[Serializable]public?class?RabbitMQ_Message{public?RabbitMQ_Message(){MessageID?=?DateTime.Now.Ticks.ToString();}///?<summary>///?消息id///?</summary>public?string?MessageID?{?get;?set;?}///?<summary>///?消息標題///?</summary>public?string?MessageTitle?{?get;?set;?}///?<summary>///?消息內容///?</summary>public?string?MessageBody?{?get;?set;?}///?<summary>///?消息管道///?</summary>public?RabbitMessageRouterEnum?MessageRouter?{?get;?set;?}///?<summary>///?游客id///?</summary>public?int?customerId?{?get;?set;?}///?<summary>///?標示代碼?0:正確///?</summary>public?ResponseStatus?result?{?get;?set;?}///?<summary>///?消息類型///?</summary>public?SuperSocketMessageTypeEnum?superSocketMessageType?{?get;?set;?}///?<summary>///?消息過期時間(毫秒)///?</summary>public?int?expiredMillSeconds?{?get;?set;?}}4、發送消息
///?<summary>///?發送消息///?</summary>public?static?void?Publish(RabbitMQ_Message?msg){創建消息busIBus?bus?=?null;try{創建消息busbus?=?BusBuilder.CreateMessageBus();bus.Publish(msg,?x?=>{x.WithTopic($"{msg.MessageRouter.ToDescription()}.{msg.customerId}");if?(msg.expiredMillSeconds?>?0){x.WithExpires(msg.expiredMillSeconds);}});//通過管道發送消息???????????????LogExtention.getInstance().WriteCustomLogAsync(msg,?"RabbitMQ消息發送",?"MQHelperPublish");}catch?(EasyNetQException?ex){LogExtention.getInstance().ErrorAsync(ex,?"RabbitMQ--MQHelper--Publish發布消息時出錯");//處理連接消息服務器異常?}finally{if?(bus?!=?null){bus.Dispose();//與數據庫connection類似,使用后記得銷毀bus對象}???????????????}}4、接收消息
///?<summary>///?接收消息///?</summary>///?<param?name="msg"></param>public?static?ISubscriptionResult?Subscribe(RabbitMQ_Message?msg,?IProcessMessage?ipro){創建消息busIBus?bus?=?null;try{bus?=?BusBuilder.CreateMessageBus();//subscriptionId設置不同的話,每一個subscriptionId都會收到相同的消息,下面的寫法只會有一個接收者var?subscriptionResult?=?bus.Subscribe<RabbitMQ_Message>(msg.MessageRouter.ToDescription(),?message?=>?ipro.ProcessMsg(message),x?=>?x.WithQueueName(msg.customerId.ToString()).WithTopic($"{msg.MessageRouter.ToDescription()}.{msg.customerId}"));//subscriptionResult.Dispose();//取消訂閱return?subscriptionResult;}catch?(EasyNetQException?ex){LogExtention.getInstance().ErrorAsync(ex,?"RabbitMQ--MQHelper--Subscribe訂閱消息時出錯");//處理連接消息服務器異常?}finally{if?(bus?!=?null){bus.Dispose();//與數據庫connection類似,使用后記得銷毀bus對象}}return?null;}在EasyNetQ中如果需要生產者確認功能,則需要在Rabbitmq的連接配置中設置publisherConfirms=true,這將會開啟自動確認。在使用高級api定義交換機和隊列時可以自己定義多種參數,比如消息是否持久化,消息最大長度等等。
總結
以上是生活随笔為你收集整理的EasyNetQ操作RabbitMQ的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软RPA工具Power Automat
- 下一篇: .NET 6 新特性 PeriodicT