【问题标题】:Using NServiceBus in a Web Application在 Web 应用程序中使用 NServiceBus
【发布时间】:2016-01-29 13:04:21
【问题描述】:

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 应用程序中完美运行,因为只有一个用户。

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

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

如果我的理解是正确的,不建议在这种情况下使用消息传递(从网络应用程序向服务发送请求消息,服务处理消息并回复响应消息)

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

【问题讨论】:

    标签: web-applications nservicebus


    【解决方案1】:

    在内部,NSB 通过维护回调及其相关消息的字典将这一切保持在一起。消息具有用于进行查找的相关 id。你是对的,在请求/响应场景中使用消息确实违背了消息传递的目的。主要目的是不阻塞,其中请求/响应本质上是一种阻塞模式。请参阅上面帖子中 Andreas 的回复,它有一个很好的解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      相关资源
      最近更新 更多