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 流。
我想从 IConsumer.Consume()
方法发出 req/res 请求,但我在 ConsumeContext<>
上没有看到 returns 引用 [=12] 的任何方法=].我是否需要在某处保留对 IBusControl
的引用并使用它,或者我可以以某种方式使用上下文?
在这种情况下,最好在消费者外部创建请求客户端,并将其作为依赖项作为 IRequestClient<,>
接口传递给消费者。请求客户端是使用 IBus
创建的,它在消费者上下文之外。
它还确保请求不太可能与代理死锁,因为响应是在总线端点上接收的,而不是消费者的接收端点(如果并发限制为 1,将永不完成)。
也不可能将消费者连接到已启动的接收端点,这是 request/response 处理的要求(它发生在幕后)。然而,总线可以为发送的消息连接消费者(响应发送到总线地址,而不是被发布),这就是它用于响应请求的原因。
为了保持消息跟踪的连续性,最好将出站请求的 InitiatorId
设置为消费者消息的 CorrelationId
,并复制 ConversationId
。这有助于跟踪和跟踪整个消息 command/event 流。