Net Core下使用RabbitMQ比较完备两种方案(虽然代码有点惨淡,不过我会完善)
一、前言
? ??上篇說給大家來寫C#和Java的方案,最近工作也比較忙,遲到了一些,我先給大家補上C#的方案。
二、使用的插件
? ??HangFire
? ??一個開源的.NET任務調度框架,最大特點在于內置提供集成化的控制臺,方便后臺查看及監控,支持多種存儲方式;在方案中主要使用定時任務做補償機制,后期可能會封裝一些,能通過頁面的形式直接添加任務;
? ?NLog
? ?日志記錄框架,方案中使用記錄日志,后期可能回集成多個日志框架;
? ?Autofac
? ?依賴注入的框架,應該不用做過多介紹;
? SqlSugar
? ORM框架,這個從剛開始我就在使用了,在現在公司沒有推行起來,不過在上兩家公司都留下的遺產,據說還用的可以,當然我還是最佩服作者;
??Polly
? 容錯服務框架,類似于Java下的Hystrix,主要是為了解決分布式系統中,系統之間相互依賴,可能會因為多種因素導致服務不可用的而產生的一套框架,支持服務的超時重試、限流、熔斷器等等;
? RabbitMQ.Client
? 官方提供的C#連接RabbitMQ的SDK;
三、方案
??模擬一個簡單訂單下單的場景,沒有進行具體的實現。同時建議下游服務不要寫在web端,最好以服務的形式奔跑,代碼中是Web端實現的,大家不要這么搞。整體上還是實現了之前提到的兩種方案:一是入庫打標,二是延時隊列(這塊沒有進行很好的測試,但是估計也沒有很大的問題);當然也是有一些特點:RabbitMQ宕機情況下無需重啟服務,網絡異常的情況下也可以進行斷線重連。接下來聊下代碼和各方插件在系統中的具體應用:
? 項目結構:
??
??RabbitMQExtensions:
?
采用Autofac按照單例的形式注入,采用Polly進行斷線重連,也開啟了自身斷線重連和心跳檢測機制,配置方面采用最簡單的URI規范進行配置,有興趣參考下官方,整體上這塊代碼還相對比較規范,以后可能也不會有太多調整;
? OrderDal
? SqlSugar的一些簡單封裝,有些小特點:大家可以可以通過配置來實現讀寫分離,采用倉儲設計。如果不太喜歡這么寫,也可以參考杰哥的做法
??OrderCommon
? 定義全局異常的中間件,還有包含一些用到的實體等等,這部分代碼還可優化拆分一下;
??OrderService
? 生產者和消費者的具體實現,這塊我還想在改造一番,將消費和業務分割開,現在寫的很凌亂,不建議這么寫,先把代碼放出來,看看大家贊同不贊同我的這些用法,可以討論,也歡迎爭論,雖然這塊代碼寫的不好,但是其實里面涉及一些RabbitMQ回調函數的用法,也是比較重要的,沒有這些函數也就實現不了我上面說那兩個特點;
//RabbitMQ宕機以后回調//客戶端這塊大家不要采用遞歸調用恢復鏈接
//具體為什么大家可以測試下,這里留點小疑問哈哈
connection.ConnectionShutdown += OnConnectionShutdown;
//消費端異常以后回調
consumerchannel.CallbackException += OnOnConsumerMessageAndWriteMessageLogException;
? Order
? 具體的調用者,大家應該根據方法名字就能區分出我上面提到的兩種方案的設計;
??HangfireExtensions
??Hangfire定時框架,采用Mysql作為持久層的存儲,寫的也比較清晰,后期就是針對這些進行擴展,實現在界面就能添加定時任務;
四、結束
??生產端和消費端這段代碼寫的凌亂,希望大家不要介意這一點,是有原因的,這里我就不說了。希望大家看到閃光點,不要在一點上糾結;下次會加入Elasticsearch和監控部分的時候我會把這塊代碼改掉,還大家一片整潔的世界;
? Github地址:https://github.com/wangtongzhou520/rabbitmq.git? 有什么問題大家可以問我;
??歡迎大家加群438836709!歡迎大家關注我!
原文地址:https://www.cnblogs.com/wtzbk/p/10908601.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的Net Core下使用RabbitMQ比较完备两种方案(虽然代码有点惨淡,不过我会完善)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDD该怎么学
- 下一篇: 利用ASP .NET Core的静态文件