![](/img/trans.png)
[英]How do you register a behavior to execute after the “Handle” method in NServiceBus 6?
[英]Multiple responses for a single request in NServiceBus reaches the destination only after the completing the execution of Handle method
为了提高应用程序的响应能力,消息处理程序使用多个响应进行响应。 但是它观察到,即使事务被禁用,消息也仅在消息处理完全完成后才传递到目标。var busConfiguration = new BusConfiguration(); 。busConfiguration.Transactions()禁用();
我们的代码如下:使用MyMessages; 使用NServiceBus; 使用系统;
public class RequestDataMessageHandler : IHandleMessages<RequestDataMessage>
{
public IBus Bus { get; set; }
public void Handle(RequestDataMessage message)
{
Console.WriteLine("Received request {0}.", message.DataId);
Console.WriteLine("String received: {0}.", message.String);
var response1 = new DataResponseMessage
{
DataId = message.DataId,
String = "InProgress"
};
Bus.Reply(response1);
try
{
TimeConsumingActivity();
var response = new DataResponseMessage
{
DataId = message.DataId,
String = message.String
};
Bus.Reply(response);
}
catch
{
var response2 = new DataResponseMessage
{
DataId = message.DataId,
String = "Error in the process"
};
Bus.Reply(response2);
}
}
}
但其观察者认为response1和response仅在TimeConsumingActivity完成后才到达目的地(这不是顺序的问题)
尝试:
busConfiguration.Transactions().DoNotWrapHandlersExecutionInATransactionScope();
因此,据我所知。 NSB配置中有一些与事务相关的设置,我不确定是否可以确切描述它们之间的区别。
上面的设置应该防止您的处理程序被封装在TransactionScope中,如果未禁用,则该事务范围(如果未禁用) 可以解释直到事务完成之前应答消息才不会“释放”到总线上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.