带有MQTT的RabbitMQ在连接时发送消息

带有MQTT的RabbitMQ在连接时发送消息,rabbitmq,mqtt,Rabbitmq,Mqtt,我正在使用mqtt启动器在收到负载为0的特定mqtt消息时执行命令 这是配置 logfile = '/home/user/mqtt-launcher/logfile' mqtt_broker = 'broker' # default: 'localhost'. If using TLS, this must be set to the domain name signed by$ mqtt_port = 1883 # de

我正在使用mqtt启动器在收到负载为0的特定mqtt消息时执行命令

这是配置

logfile         = '/home/user/mqtt-launcher/logfile'
mqtt_broker     = 'broker'       # default: 'localhost'. If using TLS, this must be set to the domain name signed by$
mqtt_port       = 1883              # default: 1883
mqtt_clientid   = 'mqtt-launcher-1'
mqtt_username   = ''
mqtt_password   = ''
mqtt_tls        = None              # default: No TLS

topiclist = {

    # topic            payload value  program & arguments
    "channel/dostuff" : {
       '0' : [
          '/usr/bin/ssh', 
          '-i', 
          '/home/user/.ssh/privatekey', 
          'user@host',
          'script.sh'
          ]
    }
}
每次启动python脚本时,shell脚本都会执行两次

但如果发送了有效负载为0的MQTT消息,我希望它只执行一次

通过清除队列,然后启动mqtt启动器,确保订阅时隐式创建的队列在之前是空的,但在程序连接后脚本仍然执行两次

当我跑的时候user@localhost:~$mosquitto_sub-h broker-p1883-t'channel/dostuff'-v-u'user'-p'mysecurepassword'I get channel/dostuff 0

我不熟悉莫斯奎托,但我认为这意味着我收到了一条信息,对吗

我关闭了retain选项,重新启动了openHAB和RabbitMQ,但仍然发送了消息。以下是openHAB mqtt.cfg:

broker.url=tcp://broker:1883
broker.user=openhab
broker.pwd=mysecurepassword
broker.qos=1
broker.retain=false
broker.async=false

您已发布一条有效负载为0且保留位已设置的消息

这意味着,当客户端订阅该主题时,最后一条带有保留位集的消息将被发送到该客户端

您可以通过向同一主题发布具有保留位集和空负载的消息来清除保留的消息。可以使用mosquitto_pub命令执行此操作,如下所示:

mosquitto_pub -t "channel/dostuff" -u 'user' -P 'password' -r -n

您应该确保您通常用于发布消息的内容没有设置保留位。

我正在使用openhab,我会检查我更改了openhab配置,但仍然没有看到我编辑的答案您是否清除了代理上现有的保留消息?愚蠢的我。。。我读得太快了。我没有在新消息上设置空负载。我想发送一条新信息就足够了。现在一切对我都有意义了。我将再次尝试修复它不,消息保存在代理上,只能通过发布一条空消息来删除,如我的回答中所述。即使重新启动代理也不会清除消息