假设我有 3 个出版商,A、B 和 C。
SOME/TOPIC 的订阅者会收到什么消息?
我想知道这一点的动机是发布者 A、B 和 C 正在从不可靠的数据源中提取这些消息,并且他们可能会错过一些消息,因此我有多个发布者发布到同一主题作为一种冗余形式。这是好主意还是坏主意?
订阅者将看到来自 A 和 B 的所有消息,它们传送给订阅者的顺序将取决于它们到达代理的顺序(这将取决于它们通常通过网络到达的顺序)以及某些经纪人的实施方式。
MQTT 代理规范没有提及如何处理多个相同的消息,因此会将它们视为任何其他消息,除非您选择创建自定义代理来执行不同的操作。
无论这是一个好主意还是不好,我们都无法回答,因为我们不知道订阅者收到多个相同消息(例如多个 FOO 和 SOMETHING 消息)的后果,因为消息在传递时不会包含任何内容有关哪个客户端发布它的信息(除非您选择在有效负载中对其进行编码)。
“我有多个发布者发布到同一主题,作为一种冗余形式。这是好主意还是坏主意?”
如果您使用 QoS=2(仅一次交付),则会破坏语义,我认为这是一个坏主意。 QoS=0(最多一次)也不再成立,因为由于多个克隆发布者,数据被多次传送。 QoS=1 就可以了,我想...
...但是 MQTT 依赖于“可靠且有序的连接”——TCP 来命名它——而您的顺序现在未知。如果 A 和 B 都按该顺序发布 foo 和 bar,订阅者可能会看到:
这听起来像是一个黑客解决方案,可能对您有用,但也可能导致订阅者方面出现奇怪的行为。