Несколько хостов NServiceBus в одной службе Windows

У меня есть база данных, в которой есть несколько очередей, которые будут содержать сообщения от стороннего продукта. Я хотел бы импортировать эти сообщения в свою шину для обработки и считаю, что могу добиться этого с помощью NServiceBus, но я хотел бы разместить весь импорт сообщений в одной службе Windows, которая будет иметь конфигурацию в очереди базы данных для мониторинга.

Этапы обработки следующие:

1) Импортировать в шину 2) преобразовать в сообщение 3) Отправить сообщение в шину

Каждый NServiceBus будет настроен на периодический опрос очереди базы данных. Когда приходит сообщение, оно выполняет Bus.SendLocal для выполнения шага 1.

Затем хост NSB получит процесс с обработчиком сообщений. В этом обработчике сообщений будет происходить преобразование сообщения. Наконец, фактически сообщение Bus будет отправлено. Обычная конфигурация будет иметь дело с целевым хостом.

Я хотел бы понять, можно ли разместить несколько хостов NSB в одной службе Windows и есть ли какие-либо проблемы, связанные с этим? Я считаю, что все хосты должны иметь одну и ту же конфигурацию (я доволен этим ограничением), это правильно?

Если несколько хостов - это "нет-нет", моя альтернатива - иметь службу Window со ссылкой на шину (singleton). Задача TPL будет отслеживать очередь базы данных, а затем использовать шину для импорта сообщения базы данных. Отдельный NServiceBus будет обрабатывать импортированные сообщения базы данных и выполнять преобразование и отправку на другие хосты.

Извините за длину вопроса.


person user634266    schedule 08.09.2014    source источник


Ответы (2)


Вы должны иметь возможность использовать Satellite для выполнения таких запросов к БД, а затем перенаправлять их на шину.

person Udi Dahan    schedule 09.09.2014

Что вы подразумеваете под "хозяевами"? Вы имеете в виду, может ли одна конечная точка обрабатывать множество разных типов сообщений?

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

person Phil Sandler    schedule 08.09.2014
comment
Привет, извините за путаницу. Хост будет иметь следующие возможности: 1) Мониторинг очереди базы данных, 2) Ссылка на шину для отправки сообщений, 3) Возможность иметь класс обработчика сообщений для обработки сообщений перед отправкой в ​​​​шину. Каждый поток будет содержать экземпляр хоста NServiceBus. - person user634266; 08.09.2014
comment
Я знаю, что могу иметь столько обработчиков сообщений на 1 хосте, добавляя IHandleMessages. Этот вопрос заключается в том, могу ли я (или должен) в одном процессе Windows размещать несколько хостов NServiceBus, каждый в отдельном потоке, или я могу (или должен) помещать каждый в свою собственную службу? - person user634266; 09.09.2014
comment
Я до сих пор не понимаю, зачем вам нужны отдельные хосты (и, возможно, это ваш вопрос). Я думаю, вам просто нужно несколько фоновых потоков, которые контролируют базу данных, а затем отправляют команды (или публикуют события) на шину. - person Phil Sandler; 09.09.2014