在Web应用程序中使用NServiceBus

时间:2010-10-26 15:30:40

标签: web-applications nservicebus

关于Using NServiceBus with Asp.Net MVC 2主题的另一个问题。 Udi回答说如果我们真的想这样做,可以使用以下方法。

var sync = Bus.Send<SomeMessage>(/*data*/)
            .Register((AsyncCallback)delegate(IAsyncResult ar)
                          {
                              var result = ar.AsyncState as CompletionResult;
                              // do something with result.Messages
                          },
                          null
            );

           sync.AsyncWaitHandle.WaitOne( /*timeout*/);

这将在Windows应用程序中完美运行,因为只有一个用户。

我想知道这在网络应用程序中是如何工作的;因为有多个线程(用于多个用户会话)调用Bus.Send并等待回调。只有一个回复队列(如果我的理解是正确的)。

NServiceBus是否根据从队列收到的响应消息知道要恢复哪个线程?

如果我的理解是正确的,则不建议对这些场景使用消息传递(从Web应用程序向服务发送请求消息,处理消息并回复响应消息)

“例如,如果要执行GetCustomersByRegionRequest和CustomersByRegionResponse等查询,则不应使用消息传递来实现。” - http://docs.particular.net/

1 个答案:

答案 0 :(得分:1)

内部NSB通过维护回调及其相关消息的字典来保持这一切。消息具有用于执行查找的相关ID。您是对的,在请求/响应方案中使用消息确实违背了消息传递的目的。主要目的是不阻止,其中请求/响应固有地是阻塞模式。在上面的帖子中看到Andreas的回复,它有一个很好的解释。