[RabbitMQ订阅在使用自动缩放订阅服务时会收到重复消息

问题描述 投票:0回答:2

我正在为我的IOT设备使用RabbitMQ将数据推送到服务器。从RabbitMQ,我正在使用nodejs服务来订阅特定主题的数据。为了获得更大的可用性,请为此服务使用自动缩放。当服务将根据其需求扩展时,它可以在2个或3个实例中运行。因为这2或3个实例,它将多次订阅来自主题的相同消息。我如何防止这种情况(订阅同一主题的多个实例不会重复)。一个实例读取消息应从RabbitMQ主题中删除,我该如何解决呢?

请提出建议:

我的代码是这样的:

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 })  
javascript node.js rabbitmq mqtt
2个回答
0
投票

您需要的是共享订阅。这允许一组客户订阅一个主题,并且任何给定的消息将仅传递给该组中的一个。您可以找到共享订阅here]的更详细说明

[共享订阅]是MQTT v5规范的一部分,但某些经纪人在其MQTT v3.x版本中添加了一些促进性的实现。

[我不确定RabbitMQ是否支持共享订阅,因为我还没有任何文档,或者我看过也没有。


0
投票

我认为您要尝试提供的是RabbitMQ代理的扩展。正如您所发现的,自动缩放只会启动多个RabbitMQ实例并弄乱您的消息传递总线。如果需要扩展更多的代理以支持更多的客户,则需要查看RabbitMQ群集:https://www.rabbitmq.com/clustering.html

© www.soinside.com 2019 - 2024. All rights reserved.