Параллельные вызовы дескрипторов в NServiceBus - PullRequest
0 голосов
/ 01 марта 2011

Я бы хотел, чтобы мои методы IHandleMessages .Handle (X x) были вызваны одновременно NSB. Даже при настройке хоста по умолчанию AsA_Client - который отключает транзакции - и предоставлении двух или более потоков (NumberOfWorkerThreads = "3" в App.Config), следующий обработчик вызывается дважды последовательно, когда в очереди два сообщения:

public void Handle(EventMessage message)
{
    Logger.Info(string.Format("Subscriber 1 received EventMessage with Id {0}.", message.EventId));
    Logger.Info(string.Format("Message time: {0}.", message.Time));
    Logger.Info(string.Format("Message duration: {0}.", message.Duration));
    Thread.Sleep(10000);
}

Это просто измененная версия демоверсии PubSub, поставляемая с NSB. Независимо от того, какие настройки я предоставляю - я также пытался настроить IsolationLevel, но безрезультатно - этот обработчик блокирует одновременные вызовы.

На практике это нежелательно для одного конкретного набора обработчиков, которые мы пишем. Желаемым поведением было бы - как минимум - пропускать параллельные потоки в метод Handle, и мы вручную передавали бы доступ к состоянию с помощью программных блокировок.

Это невозможно, или я упускаю трюк?

1 Ответ

2 голосов
/ 01 марта 2011

Наиболее вероятной причиной является то, что вы используете бесплатную Express Edition NServiceBus, которая ограничена одним потоком. Доступная в продаже Standard Edition позволяет запускать несколько потоков.

ПРИМЕЧАНИЕ : NServiceBus теперь работает на полной скорости в бесплатной пробной версии - больше нет ограничения производительности.

...