Я бы хотел, чтобы мои методы 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, и мы вручную передавали бы доступ к состоянию с помощью программных блокировок.
Это невозможно, или я упускаю трюк?