Consumer 消費者
Producer 生産者
Request-Response 請求-響應
在 MassTransit 中,一個消費者可以消費一種或多種消息
消費者的類型包括:普通消費者,saga,saga 狀态機,路由活動(分布式追蹤),處理器 handlers,工作消費者 job comsumers
Consumer
Instance
Handler
Others
繼承 IConsumer,實作 Consume 方法
三個原則:
擁抱 The Hollywood Principle, which states, "Dont't call us, we'll call you."
Consume 方法是一個被等待的方法,在執行中時其他消費者無法接收到這個消息,當這個方法完成的時候,消息被 ack,并且從隊列中移除
Task 方法異常會導緻消息觸發 retry,如果沒有配置重試,消息将被投遞到失敗隊列
所有接收到的消息都由一個消費者來執行個體來處理(請確定這個消費者類是線程安全)
Consumer 每次接收到消息都會 new 一個執行個體
通過一個委托 Lambda 方法,來消費消息
Saga<>
StateMachineSaga<>
消息的生産可以通過兩種方式産生:發送和釋出
發送的時候需要指定一個具體的位址 DestinationAddress,釋出的時候消息會被廣播給所有訂閱了這個消息類型的消費者
基于這兩種規則,消息被定義為:指令 command 和事件 event
send
publish
可以調用以下對象的 send 方法來發送 command:
ConsumeContext (在 Consumer 的 Consumer 方法參數中傳遞)
ISendEndpointProvider(可以從 DI 中擷取)
IBusControl(最頂層的控制對象,用來啟動和停止 masstransit 的控制器)
發送位址
短位址
Convention Map
rabbitmq://localhost/input-queue
rabbitmq://localhost/input-queue?durable=false
GetSendEndpoint(new Uri("queue:input-queue"))
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5iMykTMxgTMx0CM0cTMxITNyIzMxEDMxIDMy0iNxMjMxQTMvwVMwEjMwIzLcZTMzITM0EzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
在配置檔案中指定 map 規則
直接發送
可以調用以下對象的 publish 方法來發送 event:
IPublishEndpoint(可以從 DI 中擷取)
IPublishEndpoint
Request-Response 模式讓應用程式之間解耦之後,依然采用同步的方式
IClientFactory
IRequestClient
Send a request
需要處理傳回類型 OrderStatusResult,異步方式模拟同步,實際上同樣有消息隊列,消費者處理過程
通過 IBusControl 的 CreateClientFactory 方法可以得到 ClientFactory
RequestClient 可以建立請求,或者直接獲得響應
https://appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。
歡迎轉載、使用、重新釋出,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。
如有任何疑問,請與我聯系 ([email protected]) 。