【问题标题】:NServiceBus - replying to message after publishNServiceBus - 发布后回复消息
【发布时间】:2011-01-06 05:18:29
【问题描述】:

我有一个订阅者成功处理了一条消息,然后订阅者继续成功发布另一条消息以说明某个事件已经发生,我的问题是我在发布后我尝试将消息返回给发送者初始消息,系统失败并显示以下消息

没有为消息 NServiceBus.Unicast.Transport.CompletionMessage 指定目的地。无法发送消息。检查配置文件中的 UnicastBusConfig 部分并确保消息类型存在 MessageEndpointMapping。

返回码如下:

 Bus.Publish(orderMessage);

 Bus.Return((int)MySendBus.Core.ErrorCode.Ok);

app.config如下:

<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
  </configSections>

  <MsmqTransportConfig InputQueue="MyServerInputQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>
</configuration>

我添加了一个单播部分,但仍然遇到同样的错误。我的理解是 NServicebus 知道如何回复消息,除了 app.config 中的 MsmqTransportConfig 输入队列之外,我不应该指定一个队列来进行回复。

是否可以让订阅者发布消息然后响应消息的发送位置?

【问题讨论】:

  • 你能发布你的单播部分吗?我已经成功使用了 Bus.Reply(),这对你有用吗?

标签: c# nservicebus


【解决方案1】:

如果您使用 Bus.Return(),那么您必须在客户端端点上注册一个回调,如下所示:

Bus.Send<IRequestDataMessage>(m =>
            {
                m.DataId = g;
                m.String = "<node>it's my \"node\" & i like it<node>";
            })
                .Register(i => Console.Out.WriteLine(
                                   "Response with header 'Test' = {0}, 1 = {1}, 2 = {2}.",
                                   Bus.CurrentMessageContext.Headers["Test"],
                                   Bus.CurrentMessageContext.Headers["1"],
                                   Bus.CurrentMessageContext.Headers["2"]));

如果您想返回您选择的完整消息,请使用 Bus.Reply() 并在您的客户端端点中编写一个处理程序。我的完整样本可以在here找到。

【讨论】:

  • 谢谢亚当。你的样本帮助我朝着正确的方向前进。使用您的示例,我意识到我在初始消息的发件人中缺少 MsmqTransportConfig。这解决了问题。
猜你喜欢
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 2011-03-14
  • 2016-09-09
  • 1970-01-01
相关资源
最近更新 更多