MassTransit3 如何向消费者提出请求

MassTransit3 how to make request from consumer

我想从 IConsumer.Consume() 方法发出 req/res 请求,但我在 ConsumeContext<> 上没有看到 returns 引用 [=12] 的任何方法=].我是否需要在某处保留对 IBusControl 的引用并使用它,或者我可以以某种方式使用上下文?

在这种情况下,最好在消费者外部创建请求客户端,并将其作为依赖项作为 IRequestClient<,> 接口传递给消费者。请求客户端是使用 IBus 创建的,它在消费者上下文之外。

它还确保请求不太可能与代理死锁,因为响应是在总线端点上接收的,而不是消费者的接收端点(如果并发限制为 1,将永不完成)。

也不可能将消费者连接到已启动的接收端点,这是 request/response 处理的要求(它发生在幕后)。然而,总线可以为发送的消息连接消费者(响应发送到总线地址,而不是被发布),这就是它用于响应请求的原因。

为了保持消息跟踪的连续性,最好将出站请求的 InitiatorId 设置为消费者消息的 CorrelationId,并复制 ConversationId。这有助于跟踪和跟踪整个消息 command/event 流。