mqtt 消费者并发情况下丢消息的情况 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
IfEles
V2EX    程序员

mqtt 消费者并发情况下丢消息的情况

  •  
  •   IfEles 2022-03-12 13:39:47 +08:00 3216 次点击
    这是一个创建于 1354 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 折腾了半天,发现 mqtt 消费者端在生产者(物联网设备)并发起来后数据丢失的问题,生产者那边推送频率 1~3s 左右推送一次,消费者这里使用 springboot2.0+spring-integration-mqtt 来接收报文并且解析报文,初步怀疑是接收和解析放一起导致线程阻塞?目前想法是先把数据接下来后期再去处理,不知道有没有大佬遇到过同样的问题
    • emq 里的消费者会话状态如下: bTvHdP.png
    14 条回复    2022-03-14 20:40:00 +08:00
    LLaMA2
        1
    LLaMA2  
       2022-03-12 15:31:46 +08:00
    麻烦提供您发布的主题、订阅的主题、QOS 、遗嘱消息
    yazinnnn
        2
    yazinnnn  
       2022-03-12 15:49:54 +08:00
    提高两侧 qos 级别?
    不知道 spring 集成 mqtt 有没有实现 qos2
    IfEles
        3
    IfEles  
    OP
       2022-03-12 16:33:26 +08:00
    @yazinnnn 客户端这边订阅的 qos 是 0
    IfEles
        4
    IfEles  
    OP
       2022-03-12 16:34:13 +08:00
    @ye4tar 发布和订阅的主题都是 /iot/data, qos 是 0,医嘱消息没配
    wzcloud
        5
    wzcloud  
       2022-03-12 17:21:55 +08:00
    0 表示至多一次,本来就有可能丢消息吧
    yazinnnn
        6
    yazinnnn  
       2022-03-12 17:39:03 +08:00
    不想丢消息的话至少需要 qos1 ,如果想保证只收到一次的话,则需要 qos2

    不知道 emqx 的 broker 对储存消息的数量有没有限制,如果业务不是很复杂的话,其实可以自己实现一个 mqtt server/broker ,做一些定制开发
    LLaMA2
        7
    LLaMA2  
       2022-03-12 17:46:40 +08:00
    我说一些简单的经验吧,也不是很多,做过一些,仔细读过一点文档。

    首先他就是传统 socket 通讯的一种解决方案,如果你有空,你完全可以自己用 socket 仿照他的套路自己实现类似 MQTT 的东西

    其次在传统的 socket 通讯时候,消息的发送者-接受者直接建立链接,发送者是知道接受者已经接收到消息了,而在 MQTT 中发送者和接受者中间隔着一个 broker ,有点像邮局。你只是知道你的消息已经成功被邮局收下了,即发对应主题下消息发布成功。而对方有没有收到消息你是不知道的,如果你想知道,你需要和 broker 协商一个主题,当然,最新的 MQTT 协议已经有现成的实现了。


    再者,QOS 级别有点像邮局会员服务,不同的级别他会按照不同的送达率给你处理消息,这取决于消息的重要程度和你设备的抗造能力。有时候你不得不取舍。

    最后,遗嘱很有用,他会让 MQTT client 知道什么时候发送消息,什么时候该提醒用户设备有一点点故障。例如 broker 服务器有计划的重启了,重启之前发出遗嘱。IOT 设备可以马上就知道 broker 服务器正在重启,这时候 IOT 设备就可以按照事先想好的方式解决这个问题。

    还有,不同家的 MQTT Broker 实现对协议支持的完成度天差地别,选择的时候一定要自己阅读相关的说明文件,EMQ 很好,不过我不确定谁是最好的。我也不知道。
    IfEles
        8
    IfEles  
    OP
       2022-03-12 19:47:33 +08:00
    @ye4tar 感谢,还码了这么多字,主要也是第一次用这个 emq 对原理理解还不到位
    IfEles
        9
    IfEles  
    OP
       2022-03-12 19:48:56 +08:00
    @yazinnnn 好的,我尝试调整一下 qos
    IfEles
        10
    IfEles  
    OP
       2022-03-12 19:49:22 +08:00
    @wzcloud 我去看了一下好像是这样
    wzcloud
        11
    wzcloud  
       2022-03-12 22:51:27 +08:00
    emq 我之前项目用过,开源免费的,基于 Erlang 开发,有收费版;
    RabbitMQ 有 mqtt 插件;Netty 也支持 MQTT 协议;
    其他一些物联网平台也支持 MQTT 协议(他们做了 MQTT 中间件,但是使用的话,就需要你的设备连接到他们的平台了,比如中国移动的 OneNet 平台,电信联通好像也有类似平台).阿里云好像也有 MQTT 队列的服务.
    cshlxm
        12
    cshlxm  
       2022-03-13 22:10:37 +08:00
    所有收到的消息先桥接到消息队列,应该可以解决这个问题,emq 对并发处理还是挺好的,还是看下你消费者是不是处理的慢了,造成缓存队列里已经存不下了
    IfEles
        13
    IfEles  
    OP
       2022-03-14 08:26:43 +08:00
    @cshlxm 多谢,目前并发还是挺高的我也认为是这个问题
    cshlxm
        14
    cshlxm  
       2022-03-14 20:40:00 +08:00
    @IfEles 社区版说是 4C8G 能扛 10w 连接
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2867 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 14:09 PVG 22:09 LAX 06:09 JFK 09:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86