Mqtt Mosquitto只为每个主题触发一个

Mqtt Mosquitto只为每个主题触发一个,mqtt,mosquitto,libmosquitto,Mqtt,Mosquitto,Libmosquitto,我在网络上使用MOSQUITO实现了MQTT消息代理。我有一个web应用程序向代理发布内容,还有几个服务器订阅了相同的主题。所以我有一个冗余场景 我的问题是,单独使用MOSQUITO,有没有办法将其配置为仅在第一个订阅服务器上发布数据?否则,他们都会做同样的事情 我认为这是不可能的 但你可以做到这一点 让第一个用户程序在收到消息后立即在通道上响应ack,并让冗余程序在初始消息后的一小段时间内查找ack 如果收到ack,则冗余不应执行任何操作 因此,如果第一个订户获得并使用消息,其他订户即使收到消

我在网络上使用MOSQUITO实现了MQTT消息代理。我有一个web应用程序向代理发布内容,还有几个服务器订阅了相同的主题。所以我有一个冗余场景


我的问题是,单独使用MOSQUITO,有没有办法将其配置为仅在第一个订阅服务器上发布数据?否则,他们都会做同样的事情

我认为这是不可能的

但你可以做到这一点

让第一个用户程序在收到消息后立即在通道上响应ack,并让冗余程序在初始消息后的一小段时间内查找ack

如果收到ack,则冗余不应执行任何操作


因此,如果第一个订户获得并使用消息,其他订户即使收到消息也不会做任何事情。

我认为这是不可能的

但你可以做到这一点

让第一个用户程序在收到消息后立即在通道上响应ack,并让冗余程序在初始消息后的一小段时间内查找ack

如果收到ack,则冗余不应执行任何操作


因此,如果第一个订阅者获得并使用该消息,其他订阅者即使获得该消息也不会做任何事情。

不,这在MOSQUITO中是不可能的(如果没有其他答案中所述的两个订阅者之间的通信)

对于MQTT规范(v5)*的新版本,有一种称为“共享订阅”的新模式。这允许s多个客户端订阅单个主题,消息将通过循环发送到每个客户端。这更适合于负载平衡,而不是主/从故障转移


*有些代理(HiveMQ、IBM MessageSight)已经在MQTT v3.1.1上支持某些版本的共享订阅,但它们以稍微不同的方式(不同的主题前缀)实现,因此它们不具有交叉兼容性。

不,这在MOSQUITO中目前是不可能的(如另一个答案中所述,两个用户之间没有通信)

对于MQTT规范(v5)*的新版本,有一种称为“共享订阅”的新模式。这允许多个客户端订阅单个主题,消息将通过循环传送到每个客户端。这更多是为了负载平衡,而不是主/从故障转移


*有些代理(HiveMQ、IBM MessageSight)已经在MQTT v3.1.1上支持某些版本的共享订阅,但它们以稍微不同的方式实现(不同的主题前缀)所以它们不能交叉兼容。

您好。非常感谢。我考虑过这种肮脏的方式。您以前用过这种方式吗?是的,我用过。我将ack通道放在主题的子目录中,因为MQTT client提供了ack发布的绝对路径,所以我可以区分发布者和第一个订阅者。Th非常感谢你。你知道有什么好的读物可以实现if吗?不知道。抱歉。但是这个解决方法并不难实现。你所做的就是将ack级别作为参数传递给代码,并接收消息回调,检查正确的ack级别和适当的延迟量。我希望我可以共享这个代码我写过,但我再也无法访问它了。您好。非常感谢。我考虑过这种肮脏的方式。您以前用过这种方式吗?是的,我用过。我将ack通道放在主题的子目录中,因为MQTT client提供了ack发布的绝对路径,所以我可以区分发布者和first订户。非常感谢。您知道要实现if的好读物吗?不知道。抱歉。但此解决方案并不难实现。您所做的只是将ack级别作为参数传递给代码,并接收消息的回调,检查正确的ack级别和适当的延迟量。我希望我可以你是我写的代码,但我再也无法访问它了。非常感谢你的回复。我将进行变通。非常感谢你的回复。我将进行变通。