1

Web アプリケーションの要求/応答モデルで MassTransit を使用しています。リクエストを送信し、レスポンスを受け取ることができます。テスト/デバッグの目的で、応答ハンドラの HandleTimeOut を 1 時間に設定しています。問題は、サーバーが応答の送信に失敗した場合です。クライアント側で何もできません (他のページにアクセスできません)。アプリケーション サーバーは、IIS がリセットされるまで、ブラウザーからの他の要求に応答しません。これは予想される動作ですか。その場合、IIS が他のページ要求に応答しない理由と、その動作を変更する方法があるかどうかについて、誰かが光を当てることができます。

バスをautofacモジュールに登録しています

builder.Register(c => ServiceBusFactory.New(sbc =>
        {
            sbc.UseMsmq();
            sbc.VerifyMsDtcConfiguration();
            sbc.VerifyMsmqConfiguration();
            sbc.ReceiveFrom("msmq://localhost/MassTransit_ClientQueue");
            sbc.UseBinarySerializer();
            sbc.SetCreateTransactionalQueues(false);
        })).As<IServiceBus>().SingletonScoped();

私のクライアントコードは次のようになります

var bus = IoC.Resolve<IServiceBus>();
bus.GetEndpoint(new Uri("msmq://localhost/MassTransit_ServerQueue"))
                        .SendRequest(new Message(), bus, rc =>
                        {
                            rc.HandleTimeout(new TimeSpan(1, 0, 0),
                                () => { });
                            rc.Handle<MessageResponse>(resmess =>
                            {

                            });
                            rc.Handle<MassTransit.Fault<Message>>
                                (resmess =>
                                    {

                                    });
                        });
4

2 に答える 2

3

その理由は、ASP.Net Web アプリケーションのユーザーが基本的に Web アプリケーションへのアクセスをシリアル化しているためです。単一のユーザー セッション ID に対して ASP.Net で並列要求を行うことはできません。インターフェースがIRequiresSessionState実装されていません。

したがって、応答が得られず、タイムアウトまで 1 時間待機すると、そのアプリケーション ドメインに対してその時間、そのユーザーに対してそれ以上の HTTP 要求を行うことができなくなります。メッセージがタイムアウトしました。

于 2012-04-26T21:19:43.800 に答える
0

一度に複数のメッセージを処理するように MassTransit が構成されていないことが原因である可能性があります。

http://readthedocs.org/docs/masstransit/en/latest/configuration/config_api.html#bus-tuning-options

ServiceBusFactory.New(sbc =>
{
  //...
  sbc.SetConcurrentConsumerLimit(5); //try setting this to a larger number.
  //...
});
于 2012-04-06T22:57:03.330 に答える