我正在使用 emqx 代理,我想在磁盘上保留会话,以便在代理因任何原因重新启动时可以恢复会话。
我所做的:
- 使用 docker-compose 启动 emqx 代理:
emqx1:
image: emqx/emqx:v4.0.0
environment:
- EMQX_NAME=emqx
- EMQX_NODE__NAME=emqx.local.node
- EMQX_HOST=node1.emqx.io
- EMQX_CLUSTER__DISCOVERY=static
- EMQX_RETAINER__STORAGE_TYPE=disc
volumes:
- emqx-data:/opt/emqx/data
- emqx-etc:/opt/emqx/etc
- emqx-log:/opt/emqx/log
ports:
- 18083:18083
- 1883:1883
- 8081:8081
networks:
gateway-api:
aliases:
- node1.emqx.io
- 使用以下配置启动一个带有 Paho MQTT 库的 Go 订阅客户端。客户端的代码可以在paho repo的“stdinpub”和“stdoutsub”文件夹中找到
clientId = "sub1"
qos = 1
clean = false
topic_subscribe = "topic1"
- 使用此配置启动 Go 发布客户端并发布消息:
clientId = ""
clean = true
和消息:
qos = 1
retain = false
topic = "topic1"
payload = "test"
- 然后我断开客户端“sub1”并使用 qos=1 发送第二条消息:
qos = 1
retain = false
topic = "topic1"
payload = "test2"
此消息未传递到客户端“sub1”,因此代理将其排队(qos=1)。事实上,如果我重新启动 sub1 客户端,它确实会收到消息“test2”。
但是,如果我在重新启动客户端“sub1”之前重新启动代理,那么“test2”会丢失并且不会被传递。
我尝试使用retain
set to进行相同的测试,true
即使在代理重新启动后,消息“test2”也能很好地传递。因此代理将保留的消息保存在磁盘上,但不是客户端会话。
知道为什么吗?是否有我应该更改的配置以将客户端会话保留在磁盘上?