【问题标题】:IIS freezes when using MassTransit使用 MassTransit 时 IIS 冻结
【发布时间】:2012-04-18 15:49:54
【问题描述】:

我们在 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 =>
                                    {

                                    });
                        });

【问题讨论】:

    标签: .net iis msmq servicebus masstransit


    【解决方案1】:

    这可能是由于 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.
      //...
    });
    

    【讨论】:

    • 默认是 4*Environment.ProcessorCount,所以可能不是这样。
    【解决方案2】:

    原因是您的 ASP.Net Web 应用程序的用户基本上对您的 Web 应用程序进行了序列化访问 - 您不能在 ASP.Net 中对单个用户会话 ID 进行并行请求,除非您正在调用自定义 HttpHandler没有实现接口IRequiresSessionState

    因此,如果您没有收到响应,并且您等待一个小时以等待超时,那么您将无法在该小时内为该应用程序域为该用户发出更多 http 请求,直到您绑定线程等待消息已超时。

    【讨论】:

    • 谢谢,这解释了我的问题
    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 2015-09-30
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2015-06-23
    • 2019-03-18
    相关资源
    最近更新 更多