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