最近项目中遇到一个问题,就是用android消费ActiveMQ中的消息,并且对还没有被消费的消息持久化,等到Android客户端再次连接的时候,可订阅到还未处理的消息,在处理这个问题的时候我遇到了一些麻烦。
问题一
遇到的第一个麻烦是Android客户端不可以直接使用ActiveMQ的原生客户端来从ActiveMQ中订阅消息。
其原因是,android的sdk中不支持j2ee相关jar包和绝大多数的javax.*包的东西类库。
我也脑袋热过,直接将jdk的rt.jar搞到安卓项目里,但是最后报出错误信息,证明这样子做是很蠢的-_-!。
那么不能直接在Android上是使用ActiveMQ的原生客户端来发布订阅消息,就一点办法都没有了吗?答案肯定是不是这样子的,ActiveMQ的发布订阅模式支持MQTT协议,所以可以改用MQTT在ActiveMQ中发布订阅消息,想了解MQTT协议是啥,就自己点进去看看,这里就不多介绍了。
问题二
MQTT的协议的消息持久化,只是支持持久化最后一条未被消费的消息,但是这样和我的需求又不相符合。
我的解决方法:
将ActiveMQ的jms消息转发到MQTT的主题上,android终端订阅MQTT消息主题,把消息持久化放到ActiveMQ的jms主题中,我做了一个适配来解决这个问题。
适配逻辑图:
![](https://img.haomeiwen.com/i6584864/1c0e2ce4ebc1705b.png)
ActiveMQ适配器代码实现地以及android-sdk:代码地址
ActiveMQ适配器android例子:代码地址
网友评论