Подписка на RabbitMQ позволяет получать дубликаты сообщений при использовании сервиса подписки с автоматическим масштабированием - PullRequest
0 голосов
/ 26 марта 2020

Я использую RabbitMQ для своего устройства IOT для передачи sh данных на сервер. С RabbitMQ я использую сервис nodejs для подписки данных с определенных топи c. Для большей доступности я использую автоматическое масштабирование для этой услуги. Когда служба масштабируется в зависимости от ее требований, она может запускаться в 2 или 3 случаях. Поскольку это 2 или 3 экземпляра, он будет подписывать одни и те же сообщения от topi c несколько раз. Как я могу предотвратить это (несколько экземпляров, подписывающихся на одну и ту же топику c, не получают дубликатов). Один экземпляр прочитанного сообщения должен удалить из RabbitMQ topi c Как мне решить эту проблему?

Пожалуйста, предложите:

Мой код такой, как этот:

var mqtt = require('mqtt');
var clientId = 'mqttjs_' + Math.random().toString(16).substr(2, 8)
var client = mqtt.connect({
    clientId: clientId,
    host: "mqtt.host.co",
    port: 8883,
    'username': "user_name",
    'password': "password",
    protocol: 'mqtt.MQTTv311',
    resubscribe: true
});
// for topics starting at topic_name/
client.subscribe('topic_name/#', { qos: 0 })  

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Я думаю, что вы пытаетесь обеспечить масштабирование брокера (ов) RabbitMQ. Автоматическое масштабирование просто запустит несколько экземпляров RabbitMQ и испортит вашу шину обмена сообщениями ... как вы узнали. Если вам нужно увеличить количество брокеров для поддержки большего количества клиентов, вам нужно взглянуть на кластеризацию RabbitMQ: https://www.rabbitmq.com/clustering.html

0 голосов
/ 26 марта 2020

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

Совместные подписки являются частью MQTT v5 spe c, но некоторые брокеры включили в свои дополнения MQTT v3 дополнительные реализации. x builds.

Я не уверен, поддерживает ли RabbitMQ Shared Subscription, так как я никогда не делал c или когда смотрел.

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