物联网项目 ActiveMQ windows服务器私有化部署 踩坑记
最近为一个政府客户做基于MQTT的物联网项目的私有化部署。对方服务器用的是windows server 2012。
我们的应用架构是Spring + Tomcat + MySQL + MQTT + Redis。MQTT使用的是Apache ActiveMQ (https://activemq.apache.org/getting-started#OnWindows:),部署方式参见https://zhuanlan.zhihu.com/p/264862949:
应用部署完成,硬件设备全都上线后,发现了一个头疼的问题:大概2-3分钟左右,网络应用对ActiveMQ的订阅即终止(这一点通过查看http://localhost:8161/admin中“Subscribers”可以确定)。
我们的应用在阿里云平台上已经平稳运行了近1年,还是头一次发现这样的问题。经过研究,发现apache-activemq-5.15.10dataactivemq.log日志中有一条:
Transport Connection to: tcp://127.0.0.1:54187 failed: java.io.EOFException | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///127.0.0.1:54187@1883
然后查看tomcat中的日志,发现对应时间有一条日志记录,是说应用(作为client)与activeMq有超过60秒的时间没有数据收发,超过了keepAliveInterval的设置值(默认为60秒),因此应用停止了对activeMq的订阅。
找到原因后,我们在spring-mqtt设置中,disable了keepAliveInterval的处理(如下),然后一切正常了。
网络上关于MQTT的经验分享屈指可数,把我们踩过的坑分享出来,希望帮到有需要的朋友。
如果哪位有更好的解决方案,欢迎指教!