Использование NServiceBus в веб-приложении - PullRequest
3 голосов
/ 26 октября 2010

Еще один вопрос по Использование NServiceBus с потоком 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, какой поток возобновить, основываясь на ответном сообщении, которое он получил из очереди?

Если я правильно понимаю, не рекомендуется использовать обмен сообщениями для подобных сценариев (отправить запрос)сообщение из веб-приложения в службу, которая обрабатывает сообщение и отвечает сообщением с ответом)

«Например, если вы хотите выполнять запросы, такие как GetCustomersByRegionRequest и CustomersByRegionResponse, которые не должны реализовываться с помощью обмена сообщениями».- http://docs.particular.net/

1 Ответ

1 голос
/ 27 октября 2010

Внутренне NSB хранит все это вместе, поддерживая словарь обратных вызовов и связанных с ними сообщений. Сообщения имеют идентификатор корреляции, который используется для поиска. Вы правы, использование сообщения в сценарии «запрос / ответ» действительно отрицательно сказывается на цели обмена сообщениями. Основная цель состоит в том, чтобы не блокировать, где Запрос / Ответ по своей сути является шаблоном блокировки. Смотрите ответ Андреаса в посте выше, он имеет хорошее объяснение.

...