NServicebus - потоковая обработка в нескольких конечных точках
У меня есть две конечные точки.
Конечная точка 1:
- HandlerForMessage X
- HandlerForMessage Y
- HandlerForMessage Z
Конечная точка сети: - В настоящее время нет обработчиков, просто отправляются команды на шину.
Происходит следующее:
- Интернет -> Отправить
(..); - Конечная точка 1: получение сообщения X
- Конечная точка 1: обрабатывать MessageX и в обработчике Bus.Send
() и Bus.Send () - Конечная точка 1: получить сообщение Y, обработать его (это занимает 20 секунд)
- Конечная точка 1: 20 секунд спустя, после обработки MessageY, получите MessageZ и обработайте его.
Начиная с MessageY, MessageZ имеют разные обработчики, не может ли это быть сделано одновременно?
Создание другой конечной точки или перемещение ее в другую конечную точку не вариант. Я просто хочу, чтобы он был многопоточным, когда речь идет о различных типах сообщений (и обработчиков). Я не понимаю, почему это не поведение по умолчанию.
Как настроить nservicebus для одновременной обработки нескольких сообщений от другого типа (с другим обработчиком)?
NServiceBus 4.6.5 (или если мне нужно обновить до 5, хорошо, я не против. Просто хочу иметь многопоточность). Транспорт: SqlServer и для другого проекта Windows Azure Service Bus
2 ответа
Если это не изменилось, так как я начал использовать NServiceBus, "unlicenced"
Версия запускает только 1 рабочий поток, поэтому обрабатывает только 1 сообщение за раз.
Вы можете изменить это в конфигурации, изменив NumberOfWorkerThreads
стоимость на транспорт, однако вам нужно действующую лицензию, чтобы увеличить число выше 1
,
<MsmqTransportConfig MaxRetries="0" NumberOfWorkerThreads="1" />
В NServiceBus v4 вам необходимо настроить MaximumConcurrencyLevel
значение на TransportConfig
:
<TransportConfig MaximumConcurrencyLevel="5"
MaxRetries="2"
MaximumMessageThroughputPerSecond="0"/>
Если я правильно понимаю ваш сценарий, это одна транзакция / единица работы...
Все сообщения вызываются веб-конечной точкой, отправляющей сообщение конечной точке, и все последующие сообщения отправляются из этого обработчика... поэтому, даже если конечная точка может быть многопоточной, все они сериализуются в одной транзакции, поэтому если я не ошибаюсь, они будут последовательными...
Если вы не хотите запускать несколько конечных точек, взгляните на эту проблему, описывающую запуск нескольких конечных точек в одном процессе: https://github.com/Particular/NServiceBus/issues/1357
Это помогает?