我有2個服務設置爲接收相同的郵件,例如, ConsumerA : IConsumer<IMessageA>
和ConsumerB : IConsumer<IMessageA>
。每項服務設置一個獨特的端點,例如queue_a
和queue_b
並註冊其用戶。我在RabbitMQ中看到了一種類型爲扇出的IMessageA交換,並且綁定到queue_a
和queue_b
。到現在爲止還挺好。MassTransit:多個使用者,單獨的隊列/端點,郵件未遞送
- 我運行這兩個服務併發布消息,但只有服務A得到它。
- 我停止服務A並手動向RabbitMQ中的B發佈消息(服務A是發佈
IMessageA
以響應POST的使用IRequestClient<IMessageA, IMessageAResponse>
的Web服務,這是我爲什麼需要手動發佈的消息),現在服務B獲取消息並按預期消耗它。
需要明確的是,與服務停止的,該消息由RabbitMQ的路由至queue_a
和queue_b
。如果服務A正在運行,則消息只有纔會轉到queue_b
,儘管存在交換綁定,表明queue_b
綁定到IMessageA
交換機,並且絕對是應該正在獲取它們。或者至少在我能夠通過管理Web UI檢查RabbitMQ的時候,沒有證據表明有消息傳送到queue_b
(即,在queue_b_error
或queue_b_skipped
或queue_b_skipped
中沒有任何信息,後者甚至不存在)。
我已將IReceiveObserver
添加到服務A和B,但沒有任何內容觸發ReceiveFault
或ConsumeFault
。
在服務質量上,消費者基本上是這樣做的:
var result = await MethodThatReturnsIMessageAResponse(messageA);
context.Respond(result);
爲什麼一個服務交付的郵件服務B的干擾?我甚至可以從哪裏開始尋找?
你檢查了綁定?這個東西總是有效的,這是一個基本的功能。您是否嘗試過在此A服務中引發異常並查看消息是否進入錯誤隊列? –
另外,你說如果服務A停止並且你發佈消息,他們會進入隊列。那麼當你啓動服務時,這些消息會發生什麼?他們從隊列中消失,這意味着他們被消耗? –
當服務A停止時,如果我直接在RabbitMQ中手動發佈消息到'IMessageA'交換,它將被傳遞給'queue_a'和'queue_b',並且服務B能夠接收消息並使用它。如果我在此之後啓動服務A,它會接收消息並處理/消耗它。只有當服務A運行時,消息纔會進入'queue_b'。你會在我的問題的第一段中看到我已經檢查過了,綁定似乎是正確的,這就是爲什麼我對這個問題感到不知所措。 –