У меня есть достаточное количество Apache Camel (маршрутизации/посредничества/orchestation двигателя; легкий ESB) опыт, и я ломал мой мозг, пытаясь понять разницу между Акку:механизмы Akka сообщений на примере
- диспетчеры (
Dispatcher
,PinnedDispatcher
,CallingThreadDispatcher
) - Маршрутизаторы
- бассейны
- Группы
- событий Автобусы
Согласно документации:
диспетчеры являются:
... это то, что делает Akka Актёры «тик», это двигатель машины, так сказать.
Но это на самом деле не объясняет, что такое диспетчер или что такое его отношение к актеру.
Маршрутизаторы являются:
Сообщения могут быть отправлены через маршрутизатор, чтобы эффективно направлять их субъектов назначения, известных как его routees. Маршрутизатор может использоваться как внутри, так и снаружи актера, и вы сами можете управлять маршрутами или использовать автономный роутер-актер с возможностями конфигурации. Но это звучит очень ужасно, как диспетчер.
Бассейны являются:
[Тип] маршрутизатор [что] создает routees в качестве дочерних актеров и удаляет их из маршрутизатора, если они завершаются.
Группы являются:
[Тип] актер [где routees] создается извне к маршрутизатору и маршрутизатор отправляет сообщения на указанный путь, используя выбор актера, не наблюдая за прекращением ,
события Автобусов являются:
... способ отправки сообщений групп актеров
Это звучит так же, как диспетчеры и маршрутизаторы.
Так что мои главные задачи:
- В чем разница между диспетчерами, маршрутизаторами и автобусов событий, и когда использовать каждый?
- Когда использовать пул против группы?
Удивительный ответ, спасибо @hveiga (+1) - несколько быстрых наблюдений: (1), поэтому это звучит так, как 'Dispatcher' * * как * маршрутизатор, но используется внутри для обмена сообщениями и других низкоуровневых потоков в Акке, и поэтому я никогда бы не отправил сообщение непосредственно Диспетчеру **, да **? (2) Похоже, что автобус событий действительно похож на общесистемный почтовый ящик. Но если я подписались на получение сообщения с партикулярным типом сообщения с шины, будет ли это блокировать другие типы участников, также получая одно и то же сообщение? Еще раз спасибо! – smeeb
'Диспетчер' ы прозрачны для вас. Они __dispatch__ нити для выполнения действий. Вы не можете отправлять сообщения диспетчеру. Приятно отметить, что «диспетчер» ** не является актером, а «маршрутизатор». Что касается шины событий, то определение типа kinda как общесистемного почтового ящика может быть правильным. Тем не менее, я не знаю внутренних дел, но я действительно сомневаюсь, что ребята из Akka сделают что-то блокирующее. Я бы предположил, что он не блокируется. Вероятно, он реализован как «Маршрутизатор», где список маршрутов (подписчиков) для каждого типа сообщений изменяется со временем. – hveiga