paho-mqtt를 사용하고 대기열에있는 메시지를 수신하도록합니다. 내가 사용하는 브로커는 emqx 4.2.2이고 이것은 내 스크립트입니다.
from paho.mqtt.client import Client, MQTTv5
def on_connect(mqttc, obj, flags, rc, other):
print(" Session present: " + str(flags['session present']))
print(" Connection result: " + str(rc))
mqttc.subscribe([
('/message/1', 1)
])
def on_message(*args, **kwargs):
print("received a message")
client = Client(
client_id='test-client-id',
protocol=MQTTv5,
)
client.username_pw_set(
username="test-user-2",
password="test"
)
client.on_connect = on_connect
client.on_message = on_message
client.connect(
host='localhost',
port=1883,
keepalive=60,
clean_start=False,
)
client.loop_forever()
이제 브로커에게 메시지를 게시합니다.
mosquitto_pub -u test-user-2 -P test -t '/message/1' -m 'this is a message' -q 1 -V mqttv5
클라이언트가 브로커에 연결되어있는 동안 메시지를 수신하지만 QoS 1로 구독하고 있고 메시지가 QoS 1로 게시된다는 점을 감안하면 클라이언트와 브로커의 연결을 끊으면 더 많은 QoS를 게시 할 수 있습니다. 해당 주제에 1 개의 메시지를 보낸 다음 동일한 고정 client_id를 사용하여 내 클라이언트를 브로커에 다시 연결하면 내 클라이언트가 내 클라이언트가없는 동안 대기열에있는 메시지를 받게됩니다. 글쎄 그것은 일어나지 않고 mosquitto_sub를 사용하여 동일한 기능을 -c 플래그로 시뮬레이션하면 모든 것이 예상대로 작동하므로 스스로에게 질문하게됩니다 ... paho-mqtt에 문제가 있습니까? 내가 뭘 잘못하고 있니?
MQTT v5에서 클린 시작은 세션이 시작시 삭제되는지 여부 만 의미합니다. 연결을 끊은 후 세션이 지속되는 시간을 제어하려면 세션 만료 간격을 설정해야합니다.
import paho.mqtt.properties as properties
...
connect_properties = properties.Properties(properties.PacketTypes.CONNECT)
connect_properties.SessionExpiryInterval = 3600
client.connect("localhost", 1883, 60, properties=connect_properties)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다