Локальные и удаленные очереди в пабе / подчиненном сообщении - PullRequest
8 голосов
/ 08 сентября 2011

Если я строил систему с десятками издателей / подписчиков, используя очереди сообщений, кажется, у меня есть несколько вариантов конфигурации сети:

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

Кажется, что разные технологии обеспечивают разные конфигурации - например, MSMQ требует, чтобы у каждой машины была своя собственная локальная очередь, в то время как Tibco EMS, кажется, часто используется в кластерах без локальных очередей для каждого потребителя.

Каковы недостатки отсутствия локальной очереди и какие факторы влияют на решение?

Ответы [ 3 ]

5 голосов
/ 08 сентября 2011

Отсутствие локальной очереди, обеспечивающей надежное хранилище сообщений, означает, что вы не можете гарантировать доставку сообщения.Использование чего-то вроде RabbitMQ в кластере с локальным экземпляром посредника дает вам надежный механизм хранения сообщений для доставки.Если вам нужно подключиться через сетевое соединение к удаленному брокеру для отправки надежного сообщения, вы рискуете выйти из строя с большей вероятностью.

MSMQ также сохраняет и пересылает, но необеспечить любые возможности кластерной маршрутизации.Это означает, что приложение должно выполнять работу (или иметь над ней слой, такой как MassTransit или NServiceBus делает это за вас).

Когда я думаю о TIBCO, я думаю о централизованном кластереСерверы EMS, с которыми взаимодействуют серверы приложений, вместо локального запуска экземпляра посредника.Инструменты GUI, которые охватывают EMS и серверы приложений BusinessWorks, действительно навязывают модель в этом мире.

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

3 голосов
/ 08 сентября 2011

Я бы рискнул, что в большинстве случаев потребуется локальная очередь.

Локальная очередь необходима, если сообщение должно быть устойчивым.Другими словами, если соединение с удаленной очередью ненадежно, и вы хотите, чтобы сообщение в конечном итоге достигло своих подписчиков, вам понадобится возможность сохранения и пересылки локальной очереди.

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

Возможно, вы захотите посмотреть на Модель дистрибьютора NServiceBus , которая будет гибридом двух ваших сценариев: локальная очередь на каждом компьютере для перенаправления в удаленный кластер брокера / дистрибьютора.

2 голосов
/ 08 сентября 2011

Я не уверен, что согласен с комментариями к MSMQ, поскольку они кажутся устаревшими.Может быть, я что-то упускаю.

Оба сценария поддерживаются в MSMQ.

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

В сценарии 2 исходящая очередь хранения и пересылки отправляетлокальная транзакционная очередь на клиенте (опять же надежная и долговечная).

Надежность и долговечность не должны быть точками принятия решений при использовании локальных и удаленных очередей.Peformance является отличительной чертой MSMQ.

...