bifromqio / bifromq

A Multi-Tenancy MQTT broker adopting Serverless architecture
https://bifromq.io
Apache License 2.0
619 stars 61 forks source link

clean session #72

Closed objectboy2016 closed 6 months ago

objectboy2016 commented 6 months ago

Describe the bug 版本: BifroMQ 3.0 测试工具: MQTTX

将clean session设置为false,只能收到设备离线期间发送的最后一条消息,且这条消息是qos=0的保留消息,

步骤: 下列链接见Clean Session https://www.emqx.com/zh/blog/the-easiest-guide-to-getting-started-with-mqtt

但是将服务器地址替换成broker.emqx.io却能准确的收到消息, 请问clean session功能是否默认做保留消息实现? 是否有计划完整实现此功能

To Reproduce 1,创建一个名为 MQTT V3 的连接,设置 Clean Session 为 false,选择 MQTT 版本为 3.1.1。 image

2,连接成功后,订阅 clean_session_false 主题,并将 QoS 设置为 1。 image

3,订阅成功后,点击右上角的断开按钮,断开连接。

4,创建一个名为 MQTT_V3_Publish 的连接,MQTT 版本也设置为 3.1.1。连接成功后,向 clean_session_false 主题发布三条消息。 image

5,接着,选择 MQTT_V3 连接,点击连接按钮重新连接到服务器,只收到最后发送的那条消息 ,且这条消息显示的是qos=0的遗嘱消息

Expected behavior

Logs

HOST

OS(please complete the following information):

JVM:

BifroMQ

Additional context

zhongyuan17 commented 6 months ago

感谢反馈,这应该是个bug,我们会很快进行修复

zhongyuan17 commented 6 months ago

原因找到了,是因为默认使用devOnlyPlugin进行身份识别,逻辑是按 tenantId/userid 这样的格式去解析客户端的username字段,以做到不同tenant之间的租户隔离。cleanSession false的条件下,也会以tenantid 和 userid 为key去发送到指定消息缓存区域。若填入的username为空或不符合上述格式,则无法发送缓存消息。 可以尝试将订阅端username设置为形如 tenant1/sub的格式,发送端设置为 tenant1/pub 格式(需要tenantid一致),再进行离线发送消息。 后续我们将改进devOnlyPlugin的逻辑,以解决这个问题

objectboy2016 commented 6 months ago

原因找到了,是因为默认使用devOnlyPlugin进行身份识别,逻辑是按 tenantId/userid 这样的格式去解析客户端的username字段,以做到不同tenant之间的租户隔离。cleanSession false的条件下,也会以tenantid 和 userid 为key去发送到指定消息缓存区域。若填入的username为空或不符合上述格式,则无法发送缓存消息。 可以尝试将订阅端username设置为形如 tenant1/sub的格式,发送端设置为 tenant1/pub 格式(需要tenantid一致),再进行离线发送消息。 后续我们将改进devOnlyPlugin的逻辑,以解决这个问题

您好, 请问是否可以给出最新的微信群二维码(官网上已经过期了),
目前我这边需要进行身份验证, 文档有些看不明白, 我是应该写一个基于username, password的接口验证客户端是否正确还是可以通过注解监听客户端的验证请求....? 目前文档只是一笔带过, 仔细研究文档但还是不知道如何进行下去 , 请问是否有身份验证的test demo ,或者是否可以将文档如何进行身份验证详细下, 个人相信很多人都不知道如何进行身份证, 万分感谢

popduke commented 6 months ago

认证插件你可以参考下这个实现:https://github.com/bifromqio/bifromq-plugin-anyauth 。 微信群可以参考官网目前的加群方式,email下你的WeChatID。

popduke commented 6 months ago

plugin的版本需要对齐。有问题可以单独开issue。