PubSub + Надежная доставка сообщений ненадежно присутствующим абонентам - PullRequest
5 голосов
/ 28 июня 2011

Мне нужно построить систему, которая использует шину публикации / подписки (например, Mule, ZeroMQ, RabbitMQ), но из литературы все подразумевает, что приложения-подписчики надежно доступны для получения сообщений из тем, на которые они подписываются, как только Pub/ Sub bus способен доставить сообщение.

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

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

Существуют ли какие-либо шины публикации / подписки, в которые встроена подобная функция, или существуют надстройки с открытым исходным кодом, которые делают это?Можете ли вы указать мне какие-либо URL, которые описывают это?

Ответы [ 2 ]

6 голосов
/ 28 июня 2011

Этого можно добиться довольно легко с любым AMQP-совместимым брокером (например, RabbitMQ).

Выберите правильный тип обмена для вашей модели использования. Вам может понадобиться обмен direct, если вы всегда отправляете по абсолютно названным адресатам, что-то вроде chat.messages.

Если вы хотите выполнить маршрутизацию на основе шаблонов, вам нужно использовать topic exchange. Затем вы можете направить на основе шаблонов, таких как chat.messages.*.

Маршрутизация более подробно описана в RabbitMQ Tutorials .

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

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

0 голосов
/ 30 июня 2011

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

...