3

如何识别publishto atopic是否成功。有什么方法可以在发布到某个主题时得到确认。

如果publish客户端(发布者/订阅者)之间的连接丢失如何处理。

我不希望订阅者在收到 pay_load 后向发布端的特定主题发送 ack。

这是我的红宝石代码:

假设,我已经创建了客户端(@client)并在两侧进行了配置。

发布

def publish_it
  @client.publish('test/hai', 'message')
  # Ack the publish
end

订阅

@client.subscribe('test/#')

@client.get do |topic,message|
  puts "#{topic}: #{message}"
end
4

1 回答 1

9

MQTT 中没有端到端(发布者到订阅者)传递通知。这是因为作为 pub/sub 协议,发布者无法知道给定主题有多少订阅者,可能存在从 0 到 n 的任何值。

规范中内置的 QOS 级别确保消息从发布者传递到代理(然后从代理传递到订阅者)。如果要确保传递消息,请使用 QOS 级别 1 或 2。

QOS 1 将确保消息至少传递一次(如果有网络问题,可能更多)

QOS 2 将确保消息只传递一次。

在大多数 MQTT 客户端库中,deliveryComplete一旦完成发布的所有 QOS 握手,还应该调用回调,如果您添加其中之一,您可以合理地确信消息已从发布者发出经纪人。不幸的是,我在 Ruby 客户端中看不到这个实现

于 2016-06-17T08:36:23.610 回答