我们目前设备不多。数据流程如下:
遇到的问题是:java 程序挂掉,数据就丢失了,这里如何做高可用?
1
villivateur 2022-03-16 13:59:38 +08:00 via Android
你不如去解决下为什么 Java 会挂掉。
另外物联网设备自己可以在本地做缓存 |
2
cat007 2022-03-16 14:01:04 +08:00
做高可用就不会挂掉了
|
3
HHAO2019 OP @villivateur java 用的库是这个 Eclipse Paho Java Client ,经常 mqtt 断连 。重连机制一直在调试,最近几天好点了
|
4
HHAO2019 OP @villivateur 我看挺多同行都自己研发了个通讯管理机做边缘计算,感觉那样会更稳
|
5
HHAO2019 OP @cat007 主要是 java 服务订阅一个主题,如果订阅连接断了,重连也失败了,如何做高可用?我试过 system.exit 然后触发 docker 重启。
|
6
mlhorizon 2022-03-16 15:23:05 +08:00
高可用就是不让这个程序挂掉。
物联网设备本地缓存一般只对断网情况做缓存,它是没法知道数据消费者挂掉的。 |
7
HHAO2019 OP @mlhorizon 是的 ,我可能说错了,我的意思是如何让消费者的连接断了能快速回复。或者我目前做的是不是错的方法?在物联网行业中如何保证录入数据的高可用性?
|
9
paradoxs 2022-03-16 19:01:40 +08:00
呵呵,既然你的 java 程序经常要挂,那我推荐你把 Influxdb 的数据持久化。
|
10
HHAO2019 OP @paradoxs java 程序做解析,然后就直接 influxdb 持久化了。 我说错了,不是程序挂了,是订阅 emqx 的连接挂了,不好意思。我也不知道业内的逻辑是怎么样的,所以上来问问看我目前做的是不是有更好的解决方案
|
11
paradoxs 2022-03-16 19:39:44 +08:00 1
打开 emq 后台,找到插件,然后把 emqx_web_hook EMQ X WebHook Plugin 这个打开。
vim etc/plugins/emqx_web_hook.conf , 把里面的链接换成你 java 程序监听的地址。 重启一下 emqx ,然后在 java 里面就可以监听到断链的消息。 后面再操作一下重新链接 |
12
IfEles 2022-04-07 22:58:55 +08:00 1
@HHAO2019 mqtt 断开,有几种可能,你设备端的 clientId 重复,还有可能是你的 java 程序消费没有生产的速度快,导致 mq 队列积压阻塞,然后 mqtt 会断开,你可以排查一下程序经常断开的原因
|
13
yzqdm 2023-12-08 13:43:41 +08:00
请教一下监控设备上下线有什么方案吗,设备掉线推送这种的
|