1
me1onsoda 63 天前
Java 自研的话 vertx 挺方便的。如果没有研发能力最好还是买个云服务 emqx 之类的,拿别人开源的不好填坑
|
2
majianglin OP |
3
typ1805 63 天前
我们物联网项目用的是 ActiveMQ 的 MQTT 传输数据,springboot 从 MQ 订阅数据做处理的
|
4
tool2dx 63 天前
MQTT 算是相对简单的 TCP 协议了,可以考虑自己写一下,代码量并不多。
|
5
LLaMA2 63 天前
server https://github.com/eclipse/mosquitto
java client https://github.com/eclipse/paho.mqtt.java 注意协议的各版本之间的差异.cs 各版本是否匹配.各类服务端实现对 qos 的支持情况 综合而言,看项目,项目重要那就买买买,不要试图自研,自己玩或者项目甲方对 mqtt 部分功能有一定的容忍度,那就开源跑起来. 例如一些项目中做某个报表定时推送,使用 mqtt 推送,同时也有主动 http 请求,甲方不是强烈要求送达率的话,仿真各也有 http 兜底,那就开源搞起来 如果是某些物联网设备使用 mqtt 交互上报关键数据,那还是买买买,出了情况方便把锅顺利的抡起来 |
6
lancelock 63 天前
为什么除了买就是自己实现,搭个开源的 broker 不行吗
|
7
zzjcool 63 天前
你们团队有专人维护,并且技术上有信心解决就自建,不然还是上云
客户端的话看看 emq 的文档,我感觉 emq 在 mqtt 领域还是领先的 |
8
StinkyTofus 63 天前
买一台云服务器自己搭建 EMQX , 特别简单好用, 我觉得比阿里云的后台配置 MQTT 好用多了, 而且阿里云的 MQTT 经常出问题。
|
9
zouri 63 天前
问题一:mqtt broker 服务器可以使用开源搭建,目前这两个用户较多 emqx mosquitto
问题二:我个人经验目前 4G 物联网足够稳定 问题三:EclipsePaho 是一个开源项目为多种语言实现了 MQTT 客户端库,可以参考使用 https://eclipse.dev/paho/index.php?page=downloads.php |
10
xytest 63 天前
你的需求和我最近带的项目一样。(我们有大批量的设备走 485 接口,然后通过轮询采集后通过物联网走 mqtt 上报)
问题一:我们没有考虑自建,因为感觉后期维护成本有点高。在对比下选择了腾讯云的物联网平台原因:比阿里成本低,实现就是设备推送到腾讯云物联网平台,平台在接收消息后通过数据流传到服务器。 问题二:网络稳定这个问题只要你信号覆盖情况下都没有问题,应该考虑的数据端的数据采集稳定,例如多设备轮询,在遇到报错的时候,是否重新查询。 问题三:开源平台当时也试过几个还是出现了问题一的情况就是维护成本高。 |
11
flmn 63 天前
有开源的 emqx
|
12
glitterzhong 63 天前
docker 直接搭建 emqx 就行
|
13
majianglin OP 多谢楼上各位的答疑解惑,学到了很多
|
14
GooMS 63 天前 via Android
搭起来还是不麻烦的,主要看预算
|
15
halov 63 天前
MQTT 还是建议使用 EMQX 搭建 , 我们公司 使用消息中间件 同时 充当 MQTT 服务器 坑挺多的
|
16
fffq 63 天前
直接使用 emqx 吧,
|
17
mosfet 63 天前
thingsboard+emqx
开发都省了 |
18
vfs 63 天前
除非你的时间预算很充分, 不然不要自己写 MQTT 服务器端。 我正在实现一个 MQTT Broker (公司项目), 这个协议 RFC 很简单, 真正做起来, 细节很多。
|
19
DonaldY 63 天前
netty 里就有,直接使用。
|
20
andyxq 63 天前
作为从业者,我觉得 MQTT Broker 实现起来难度不算太大,但是做到较好的性能需要投入很多的精力。我测试过一些开源的或商业的 Broker, EMQX 是算是性能比较好的,开放的插件也比较多,如果没有足够的研发能力建议直接用 EMQX.
市区用 4G 基本没问题,但是远离市区信号不好的地方可能会有频繁上下线的问题。 |
21
gesse 63 天前
问题二:
MQTT 协议就是为这种情况开发的。 |
22
gesse 63 天前
推荐个 MQTT 本地测试、开发工具
https://www.redisant.cn/mqtt |
23
yinft 63 天前
一个有着从 0 到 1 自建 mqtt 服务的过来人来看,emqx 完全没问题,关键的问题是特么多这 4g 模块,我们的机器人经常就因为 4g 物联网卡的网络,跟云端丢失通讯
|
25
DreamLu 63 天前
java 的话试试 mica-mqtt ,我自己开发的,现在也有很多朋友在用,集成到服务中也非常方便。几小时就能精通。
|
26
ikas 63 天前
不差钱 ->阿里云等云提供的 mqtt server
有特殊需求->嵌入 netty mqtt 其它->自己部署 mqtt server |
27
spartacussoft 63 天前
用 exmqx ,再结合 grpc 来与你的服务进行连接验证、订阅发布验证等交互。
|
28
ZiLong 63 天前
emqx 挺强大的,也非常成熟,唯一的问题时 erlang 开发的,不过一般出问题也不会排查到源码层。mqtt 确实在信号不好的地方会有断连,频繁上下线,一是在本地缓存发送失败的数据,二是通过 http 协议补偿
|
29
xsen 63 天前
动不动就说什么实现 mqtt broker 的不知道脑子怎么想的,非要挖个坑跳进去,然后慢慢填坑
不管是基于开源的、还是商业化的,支持 mqtt broker 的方案都那么多、那么成熟 对于楼主这样的,找个成熟、稳定的 mqtt client jar 包接入不就可以了 |
30
tubinorg 63 天前
emqx
|
32
Greendays 63 天前
我的项目是用 Springboot3 配合 EMQX 做的,不过目前没上线。测试阶段用着没啥毛病。
|
33
deng81416754 63 天前
|
34
afxcn 63 天前
不要假定用云服务商的 mqtt 就稳定,基本的维护力量还是需要有的。#5 楼推荐的 mosquitto 还是不错的。
|
35
dbpe 63 天前
@majianglin 不小众了..而且 2 个又不冲突....
|
36
yazinnnn0 63 天前
我用 vertx+quarkus 写过 mqtt 协议的 server(不是 broker), 挺好实现的
不去实现 mqtt broker 的各种 qos 能力的话, 几行代码就可以跑起来 |
37
zhufpy 63 天前
直接跟你们的硬件开发用 socket 通信,搞啥协议,哈哈哈,我就这么干的[doge]
|
38
iamtuzi3333 63 天前
@zhufpy socket 设备数量多了 就很烦,如果要数据要存文件的情况下,会一直占内存,
|
39
ZZ74 63 天前
emqx 或者 netty (已经带了 MQTT 的) 开箱即用
|
40
zhufpy 63 天前
@iamtuzi3333 我们上传的数据量不是很大,我都是塞队列,然后存库了,等设备多了,再换别的解决方案,哈哈哈
|
41
sagaxu 63 天前
@zhufpy 好多 RTU 都这么干,上报的都是 TLV 报文(tag-length-value),协议简单好实现。
@iamtuzi3333 现在都是 NIO ,几万个设备小意思,接收性能肯定不是瓶颈,丢队列批量入库。 |
42
nomytwins 63 天前
我们用的 emqx docker 就行了
|
43
Eds1995 62 天前 via iPhone
当然 EMQX 了,干嘛要自己开发,或者 EMQX Cloud serverless 有超高的免费额度。
|
44
Hyvi 61 天前
问题 1:
我们物联网项目想使用 MQTT 作为通讯协议 方案 1: 使用阿里云 云消息队列 MQTT 版,Java 服务器接入消息队列 方案 2:Java 服务器自己实现 MQTT 协议 这两个方案你们怎么选择的?有哪些优劣? 有更好的方案吗? ------- 有人就选择方案 2 ,等其他自建或者用开源的方案。 有钱就选择方案 1 。把它理解为普通的网关一样的对待。现在还有哪个公司自建负载均衡、API-gateway 呢。 问题 2: 目前市区内的 4G 物联网网络是否稳定?是否需要加上短信通知? ------------重连肯定是要的 问题 3: Java 有哪些好用的 MQTT 开源框架做应用开发,最好是开箱即用,和业务解耦,业务程序员最好不关心协议实现 -------EclipsePaho 。 |
45
chuunshii 61 天前
EMQX ,搭建非常容易
|
46
iamtuzi3333 59 天前
@zhufpy 唉,我们数据量很多,我现在是塞到队列,然后存库,写文件,设备也多,但是占用内存巨多,这个问题还得排查。
|
47
iamtuzi3333 59 天前
@sagaxu nio 我不是很清楚这个,但是看了上个项目,用 nodejs 写的,然后有 600 个传感器,然后传感器都是主动连接服务器的 socket 丢数据上来,每次一启动就迅速把可用内存占满了,100 多 G ,现在丢给我排查,我也不懂 nodejs ,服务器只负责监听,现在搞的很烦,项目不敢起,起了就把其他项目干了,大佬,你懂这个方面的内容吗,能不能指教一下。
|
48
sagaxu 59 天前
|
49
iamtuzi3333 59 天前
@sagaxu 这个 debug 我试过了,nodejs 写的 koa 框架,接口层面是没有问题,就是接收数据这个模块有问题,他原本写的是开了一个端口,然后就是监听设备连接,连接了之后就接收数据,数据入库 and 写文件;问题就是它是把物理内存中的备用内存持续占满,导致可用内存持续下降,用的是 Window Server 服务器,我初步怀疑是因为连接了众多传感器,开启了非常多的异步事件连接,同时又要入库写文件,写文件数据全部积累在内存中,持续增长,它是一天凌晨时候才开启第二天的数据写入到新文件中,数据量高频且多,这个问题好难排查,之前想过用单个设备连接接收数据来测试性能,但是现在没有办法改,因为项目一启动,600 多个传感器就自动连上来发数据了;搞的我头大了,之前写这个代码的人也早就离职跑路了,留下烂摊子让我接。。。
|
50
sagaxu 59 天前
@iamtuzi3333 600 个 websocket 不会超过 1G 内存,你得先找出是什么数据占用了内存。
比较有可能的情况, 1. 接收太快来不及写入,挤压造成高内存占用,那就要提升入库性能,比如批量写。 2. 接收到的数据入库之后,没有释放内存,这是内存泄露。 3. 数据缓存在队列中,定期才写入(文件/DB),这种要缩短写入间隔时间。 这种马上占满内存的,反而是最好排查的,长期慢慢爬升的比较麻烦,重现一次都要好久。 |
51
iamtuzi3333 59 天前
@sagaxu 不是 websocket ,就是普通的 socket 通信; 1 有可能,因为数据是每秒发送一条过来,600 多个可能就有 600 多条同一时间发送过来; 2 的话内存泄漏应该不会,除了入库,它还会一直写入到文件中,此时文件应该一直持续在内存中,很大概率是这个问题; 3 这个项目写的人完全没考虑用缓存去处理数据,来一条数据就入库并且写入文件,这个问题似乎也不存在;现在不是马上占满,就是慢慢爬上,一直让可用内存变少,备用内存持续上涨,最后只剩下十几 M ,服务器运行内存是有 192GB 的,复现就只能 run 项目慢慢等,其中也不会有什么报错消息出来,这个很头疼,谢谢大佬的解答。
|
52
coderxy 59 天前
@iamtuzi3333 大概率内存泄漏。 对服务做一下内存分析即可
|
53
huifer 59 天前
借楼发个基于 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/ |