Message Broker с синхронной доставкой

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

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

MQTT с его механизмом публикации-подписки кажется хорошим и может даже использоваться для связи точка-точка (где некоторые конкретные темы подписываются только определенными клиентами). Но он (как и JSM, STOMP и т. д.) асинхронный. Отправитель отправляет сообщение брокеру и не знает, будет ли оно доставлено получателю. Мы хотим, чтобы отправитель был проинформирован об успешной доставке или истекшем времени ожидания (когда никто не получает сообщение).

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


person radlan    schedule 24.04.2015    source источник
comment
По определению MQTT — это pub/sub, а не система обмена сообщениями 1-к-1, это 1-ко-многим. Сторона публикации не должна заботиться о том, сколько людей получили сообщение (поскольку оно потенциально может быть завалено бесконечным количеством полученных уведомлений). MQTT может быть неправильным выбором протокола для системы, которую вы описываете.   -  person hardillb    schedule 24.04.2015
comment
@hardillb Да, именно поэтому я прошу альтернативные протоколы. MQTT кажется очень хорошим протоколом, который, к сожалению, не соответствует требованиям.   -  person radlan    schedule 24.04.2015
comment
Понятно, почему MQTT не подходит, но этот вопрос несколько расплывчат о том, что приемлемо. Вы не предоставили подробную информацию о своих требованиях, почему вы должны выбирать между многими протоколами запроса/ответа, такими как COAP, REST, XMPP или CORBA. Прокси поместит другую машину в середину любого из них. Что именно вам нужно от машины посередине?   -  person jdr5ca    schedule 26.04.2015


Ответы (1)


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

  1. Издатель подтверждает (асинхронно): http://www.rabbitmq.com/blog/2011/02/10/introduction-publisher-confirms/

  2. Фиксация транзакции: https://www.rabbitmq.com/semantics.html

  3. Сообщения TTL (для обработки времени ожидания) https://www.rabbitmq.com/ttl.html

С помощью этих функций вы можете справиться с ситуациями тайм-аута и успешной доставкой.

Если этого недостаточно, вы можете использовать RPC: https://www.rabbitmq.com/tutorials/tutorial-six-java.html

Дайте мне знать, если вам нужна дополнительная информация.

person Gabriele Santomaggio    schedule 24.04.2015
comment
Насколько я понимаю, первые 3 предложения не помогают, так как я могу быть уверен только в успешной доставке брокеру, а не предполагаемому получателю. Однако RPC с RabbitMQ может быть вариантом. Мы оценим это. - person radlan; 24.04.2015