关于 MQTT 协议有几个问题想请教

5 天前
 majianglin
问题 1:
我们物联网项目想使用 MQTT 作为通讯协议
方案 1: 使用阿里云 云消息队列 MQTT 版,Java 服务器接入消息队列
方案 2:Java 服务器自己实现 MQTT 协议
这两个方案你们怎么选择的?有哪些优劣? 有更好的方案吗?

问题 2:
目前市区内的 4G 物联网网络是否稳定?是否需要加上短信通知?

问题 3:
Java 有哪些好用的 MQTT 开源框架做应用开发,最好是开箱即用,和业务解耦,业务程序员最好不关心协议实现
3977 次点击
所在节点    程序员
53 条回复
sagaxu
5 天前
@zhufpy 好多 RTU 都这么干,上报的都是 TLV 报文(tag-length-value),协议简单好实现。

@iamtuzi3333 现在都是 NIO ,几万个设备小意思,接收性能肯定不是瓶颈,丢队列批量入库。
nomytwins
5 天前
我们用的 emqx docker 就行了
Eds1995
5 天前
当然 EMQX 了,干嘛要自己开发,或者 EMQX Cloud serverless 有超高的免费额度。
Hyvi
3 天前
问题 1:
我们物联网项目想使用 MQTT 作为通讯协议
方案 1: 使用阿里云 云消息队列 MQTT 版,Java 服务器接入消息队列
方案 2:Java 服务器自己实现 MQTT 协议
这两个方案你们怎么选择的?有哪些优劣? 有更好的方案吗?

------- 有人就选择方案 2 ,等其他自建或者用开源的方案。 有钱就选择方案 1 。把它理解为普通的网关一样的对待。现在还有哪个公司自建负载均衡、API-gateway 呢。

问题 2:
目前市区内的 4G 物联网网络是否稳定?是否需要加上短信通知?
------------重连肯定是要的
问题 3:
Java 有哪些好用的 MQTT 开源框架做应用开发,最好是开箱即用,和业务解耦,业务程序员最好不关心协议实现

-------EclipsePaho 。
chuunshii
3 天前
EMQX ,搭建非常容易
iamtuzi3333
1 天前
@zhufpy 唉,我们数据量很多,我现在是塞到队列,然后存库,写文件,设备也多,但是占用内存巨多,这个问题还得排查。
iamtuzi3333
1 天前
@sagaxu nio 我不是很清楚这个,但是看了上个项目,用 nodejs 写的,然后有 600 个传感器,然后传感器都是主动连接服务器的 socket 丢数据上来,每次一启动就迅速把可用内存占满了,100 多 G ,现在丢给我排查,我也不懂 nodejs ,服务器只负责监听,现在搞的很烦,项目不敢起,起了就把其他项目干了,大佬,你懂这个方面的内容吗,能不能指教一下。
sagaxu
1 天前
iamtuzi3333
1 天前
@sagaxu 这个 debug 我试过了,nodejs 写的 koa 框架,接口层面是没有问题,就是接收数据这个模块有问题,他原本写的是开了一个端口,然后就是监听设备连接,连接了之后就接收数据,数据入库 and 写文件;问题就是它是把物理内存中的备用内存持续占满,导致可用内存持续下降,用的是 Window Server 服务器,我初步怀疑是因为连接了众多传感器,开启了非常多的异步事件连接,同时又要入库写文件,写文件数据全部积累在内存中,持续增长,它是一天凌晨时候才开启第二天的数据写入到新文件中,数据量高频且多,这个问题好难排查,之前想过用单个设备连接接收数据来测试性能,但是现在没有办法改,因为项目一启动,600 多个传感器就自动连上来发数据了;搞的我头大了,之前写这个代码的人也早就离职跑路了,留下烂摊子让我接。。。
sagaxu
1 天前
@iamtuzi3333 600 个 websocket 不会超过 1G 内存,你得先找出是什么数据占用了内存。

比较有可能的情况,
1. 接收太快来不及写入,挤压造成高内存占用,那就要提升入库性能,比如批量写。
2. 接收到的数据入库之后,没有释放内存,这是内存泄露。
3. 数据缓存在队列中,定期才写入(文件/DB),这种要缩短写入间隔时间。

这种马上占满内存的,反而是最好排查的,长期慢慢爬升的比较麻烦,重现一次都要好久。
iamtuzi3333
1 天前
@sagaxu 不是 websocket ,就是普通的 socket 通信; 1 有可能,因为数据是每秒发送一条过来,600 多个可能就有 600 多条同一时间发送过来; 2 的话内存泄漏应该不会,除了入库,它还会一直写入到文件中,此时文件应该一直持续在内存中,很大概率是这个问题; 3 这个项目写的人完全没考虑用缓存去处理数据,来一条数据就入库并且写入文件,这个问题似乎也不存在;现在不是马上占满,就是慢慢爬上,一直让可用内存变少,备用内存持续上涨,最后只剩下十几 M ,服务器运行内存是有 192GB 的,复现就只能 run 项目慢慢等,其中也不会有什么报错消息出来,这个很头疼,谢谢大佬的解答。
coderxy
1 天前
@iamtuzi3333 大概率内存泄漏。 对服务做一下内存分析即可
huifer
1 天前
借楼发个基于 Go 语言开发的物联网开发平台。

Go IoT 开发平台 是一个使用 Go 语言开发的免费、高效、可扩展的物联网解决方案。 该平台支持 MQTT 、HTTP 、WebSocket 、COAP 、TCP/IP 协议传输,提供轻量化的配置工具完成数据的报警功能,提供基于 JavaScript 的数据统计服务。

Git 仓库地址: https://gitee.com/pychfarm_admin/go-iot-platform
官网首页: http://iot-dev-egi.pages.dev/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1072878

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX