Это звучит как прецедент для «классической» очереди сообщений со многими потребителями. Обратите внимание, что подписчики с корневыми подписями - это огромный антипаттерн в MQTT, поскольку медленные клиенты-клиенты могут замедлить работу всей системы, если не выполняется сложная обработка противодавления.
Я видел, что люди делают что-то подобное, что вы хотите достичь с помощью следующей архитектуры:
- HiveMQ MQTT broker, который находится на краю MQTT. Этот брокер реализует собственный плагин (с системой плагинов с открытым исходным кодом), который пересылает каждое сообщение MQTT (с JMS, AMQP или HTTP) другому брокеру сообщений, например AWS SQS.
- Потребители просто используют сообщение в очереди сообщений.
Это очень хорошо работает в облачной среде, тем более что вам не нужно заботиться о масштабировании очереди сообщений, так как, например, SQS делает это автоматически для вас. Вы можете добавить больше серверов HiveMQ на край, а бэкенд MQ также масштабируется.
Преимущество этого решения в том, что вы можете масштабировать очень хорошо, так как все компоненты дублируются, вы можете иметь больше HiveMQ (например, в кластере), если ваша загрузка MQTT увеличивается, и вы можете масштабировать своих потребителей, если больше нагрузки должен быть обработан.
HiveMQ 3 (будет выпущен в первом квартале 2015 года) будет поддерживать желаемое поведение из коробки (распространять сообщения по теме среди подписчиков с семантикой только один раз), поэтому это отлично работает без какой-либо дополнительной системы. Однако вам придется ждать этого готового решения несколько месяцев.
Обязательная оговорка: Я участвую в разработке HiveMQ, так как всегда: этот ответ может быть предвзятым.
Как вы обычно реализовать запасной вариант по электронной почте/... когда потребитель не потребляет тему, в чтобы предупредить его? Поддерживает ли HiveMQ это по умолчанию? – user3684457
Вы имеете в виду, если потребитель не потребляет сообщение? Ну, в этом случае вы можете взглянуть на документацию системы плагинов (hivemq.com/docs/plugins/latest/), если требуемые перехватчики могут быть реализованы. Я не думаю, что для решения этой проблемы существует одноразовое решение. –
В принципе, у меня будет 10 потребителей по определенной теме, и, возможно, 5 из них не будут потреблять последние сообщения - я хочу найти способ получить их идентификатор клиента в реальном времени, чтобы добавить некоторую логику, тогда – user3684457