アプリケーションの応答性を向上させるために、メッセージ ハンドラーは複数の応答で応答しています。ただし、次のようにトランザクションが無効になっている場合でも、メッセージ処理が完全に完了した後にのみメッセージが宛先に配信されることが観察されました var busConfiguration = new BusConfiguration(); busConfiguration.Transactions().Disable();
コードは次のとおりです。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 が完了した後にのみ宛先に到達します (これは順序の問題ではありません)。