在这篇文章中,我问是否有可能将ActiveMQ Artemis中的消息保持在队列中,直到所有订阅者都收到它,答案是这可以使用clean = false标志来完成。
由于公司防火墙的限制,我还没有测试过这个,但我认为MQTT"清洁";参数可以在Telegraf MQTT侦听器中通过"persistent_session = true"参数-没有"clean"参数可用。
但是我想知道MQTT如何区分特定订阅者何时处于脱机状态,何时订阅者进程已被终止?如果终止Telegraf进程,它将无法发送取消订阅命令,因此消息将被永久保存,或者直到达到某个消息过期限制(实际上,这可能是可以的)。
基本上问题是,如何指定"clean"的参数。
不同的MQTT客户机实现将以不同的方式表示协议语义。在这种情况下,似乎MQTT的Telegraf输入插件将CONNECT
控制数据包的CleanSession
标志表示为persistent_session
。
关于persistent_session
的文档是这样说的:
## Persistent session disables clearing of the client session on connection.
## In order for this option to work you must also set client_id to identify
## the client. To receive messages that arrived while the client is offline,
## also set the qos option to 1 or 2 and don't forget to also set the QoS when
## publishing.
因此,将persistent_session
设置为true
似乎相当于将CleanSession
标志设置为false
。