我有一个成功处理消息的订阅者,然后订阅者继续成功发布另一个消息以声明某个事件已经发生,我的问题是我在发布后尝试将消息返回给初始消息的发送者并且系统因以下消息而失败
没有为消息NServiceBus.Unicast.Transport.CompletionMessage指定目标.消息无法发送.检查配置文件中的UnicastBusConfig部分,并确保消息类型存在MessageEndpointMapping.
返回码如下所示:
Bus.Publish(orderMessage);
Bus.Return((int)MySendBus.Core.ErrorCode.Ok);
Run Code Online (Sandbox Code Playgroud)
app.config如下:
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
</configSections>
<MsmqTransportConfig InputQueue="MyServerInputQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我添加了一个单播部分,仍然得到相同的错误.我的理解是NServicebus知道如何回复消息,我不应该为app.config中找到的MsmqTransportConfig输入队列指定除了回复的队列.
是否可以让订阅者发布消息然后响应消息的发送位置?
如果您使用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"]));
Run Code Online (Sandbox Code Playgroud)
如果要返回所选的完整消息,请使用Bus.Reply()并在客户端端点中编写处理程序.我的完整样本可以在这里找到.
| 归档时间: |
|
| 查看次数: |
3136 次 |
| 最近记录: |