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