【问题标题】:Send messages to the temporary queue with MassTransit使用 MassTransit 将消息发送到临时队列
【发布时间】:2020-02-15 18:00:59
【问题描述】:

我有以下情况,我无法直接响应 MassTransit RequestClient 的请求

  • 请求服务 1 实现 RequestClient 并调用 GetResponse
  • 另一个服务 2 的请求消费者只是将请求信息 (messageId, requestId ...) 保存到某个存储空间而不发回响应。
  • 根据服务2中的API调用,我们可以找到保存的请求信息并将响应发送回RequestClient。我可以通过将响应发送到 RequestClient 总线的临时队列来实现这一点,但消息最终会出现在临时队列的跳过队列中,GetResponse 永远不会收到消息。

如何让消息到达主临时队列,并让GetResponse 消费者找到它。

【问题讨论】:

  • 您是否保存了原始请求中的ResponseAddress,并使用它来发送响应,包括 RequestId 标头?源代码中有一个复杂的example,但您需要在 SendContext 上设置属性,以便将消息关联回请求客户端。
  • 是的,我已经保存了 ResponseAddress 并使用它来发送响应,我在发送中包含了相同的 RequestId。我将尝试填充上下文的其余属性。感谢您指出正确的代码查看位置。
  • 是否可以选择使用现有的 RequestStateMachine 我从消费者发布 RequestStarted 并从 API 控制器发布 RequestCompleted。
  • 未来?我不知道。老实说,我不记得我在该状态机中添加了什么,可能与 Conductor 有关。

标签: masstransit


【解决方案1】:

如果有人有类似的情况。我们通过在消费者中实现事件等待机制来实现这一点。当在服务 2 中进行外部 API 调用时,会触发一个内部事件,然后通过 ResetEvent 等待它的消费者继续收集响应并通过开箱即用的 RespondAsync 将其发回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多