我们在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 =>
{
});
});
答案 0 :(得分:3)
原因是您的ASP.Net Web应用程序的用户基本上序列化了对您的Web应用程序的访问 - 除非您调用自定义HttpHandler,否则您无法在ASP.Net中为单个用户会话ID进行并行请求没有实现接口IRequiresSessionState
。
因此,如果您没有收到回复,并等待一小时的超时,那么您将无法为该应用程序域的那个小时为该用户提出更多的http请求,直到您绑定的主题为止等待消息已超时。
答案 1 :(得分: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.
//...
});