微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重新连接后订阅者没有收到消息

如何解决重新连接后订阅者没有收到消息

注意我使用 EMQX 作为代理,使用 python-paho 作为客户端库。我不确定这个问题是由谁造成的。

如果发布者在一段时间内没有发送任何消息,订阅者会断开连接但也会再次重新连接(因为 loop_forever 会自动处理重新连接)。但是重连后,如果生产者再次开始发送数据,则自动重连的服务器不会收到任何消息。这种情况下,订阅者需要重新启动(手动重连)

我的订阅

import paho.mqtt.client as mqttClient
import json
import datetime

def on_connect(client,userdata,flags,rc):

    if rc == 0:
        print("Connected to broker")

    else:
        print("Connection Failed")

def on_disconnect(client,rc):
    if rc != 0:
        print("Unexpected MQTT disconnection. Will auto-reconnect")
    

def on_message(client,message):
    print(str(datetime.datetime.Now())+str(message.payload) + "\n")


#broker_address= "3.121.233.176" 
broker_address= "address_of_the_broker" 
port = 1883                     
client = mqttClient.Client("clientLB1")               #create new instance
client.on_connect= on_connect                      #attach function to callback
client.on_message= on_message                      #attach function to callback
client.on_disconnect = on_disconnect
client.connect(broker_address,port,60)
client.subscribe("xdk1") #subscribe
client.loop_forever() #then keep listening forever
 

我的出版商:

import paho.mqtt.client as paho
import time
from random import random

def on_publish(client,mid):
    print("mid: "+str(mid))
 
client = paho.Client()
client.on_publish = on_publish
#client.connect("35.157.39.224",1883)
client.connect("LBmqtt-1826452731.eu-central-1.elb.amazonaws.com",1883)
client.loop_start()

while True:
    temperature = random()
    (rc,mid) = client.publish("xdk1",str(temperature),qos=1)
    time.sleep(.1)

如何解决这个问题?

解决方法

解决了

client = mqttClient.Client("client_name",clean_session=False) 

来自文档:

clean_session:确定客户端类型的布尔值。如果为真,则 经纪人将删除有关此客户的所有信息 断开连接。如果为 False,则客户端是持久客户端和订阅 信息和排队的消息将在客户端被保留 断开连接。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。