0

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

4

2 に答える 2

0

NServiceBus Google グループで回答しました

于 2015-01-16T16:02:28.423 に答える