Android使用Mqtt协议链接ActiveMQ服务器实现推送
MQTT (Message Queuing Telemetry Transport,消息队列遥测传输) 是一种标准化的发布/订阅消息传输协议,设计于1999年,最初是为了在卫星之类的物体上使用。它是一个非常轻量级的协议,由于对带宽需求很低,从而成为了 M2M 通信或物联网应用的理想选择,现在已经成为这类场景最常见的协议之一。
ActiveMQ 是一个 MOM(Message Orient middleware),具体来说是一个实现了 JMS 规范的系统间远程通信的消息代理。
- MQTT
- ActiveMQ
- Android mqtt 源码
- Android mqtt 使用
MQTT
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
1) “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情 况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
2) “至少一次”,确保消息到达,但消息重复可能会发生。
3) “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;
android中使用mqtt协议需要导入一个jar包
下载jar包 可以下载最新的,然后导入你的Android工程中
ActiveMQ
⒈ 多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
⒉ 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
⒊ 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
⒋ 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
⒌ 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
⒍ 支持通过JDBC和journal提供高速的消息持久化
⒎ 从设计上保证了高性能的集群,客户端-服务器,点对点
⒏ 支持Ajax
⒐ 支持与Axis的整合
⒑ 可以很容易的调用内嵌JMS provider,进行测试
ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言的客户端和协议,而且可以非常容易的嵌入到企业的应用环境中,并有许多高级功能。
这里讲一些安装与配置
下载后的j压缩包解压后
然后在环境中配置activeMQ的变量,方便快速启动
将刚才解压的文件中的bin的路径配置在系统变量path中
打开activeMq的conf文件夹中的activemq.xml,看看服务器的端口
可以看到其中mqtt协议的端口号:8099,这里是我改过的,默认的应该不是这个
好了环境配置好了,我们可以启动ActiveMQ服务看看,win+r 启动cmd
输入口令 activemq start(如果不能正常启动说明你环境变量配置的有问题,可以cd进入bin文件夹然后再启动)
然后在浏览器输入网站http://localhost:8161/
显示该结果配置就成功了
如果让你输入账号密码 全部输入admin,也可以将安全验证关掉
如下打开conf文件夹中的jetty.xml
然后将这里的true改成false,true为需要验证,相反就是不需要
Android mqtt 源码
先确定你下载了mqtt的jar包并引入你的项目中了,然后以下是源码
代码包会放在的下载资源中 下载地址 下载后直接复制在你的项目中即可,注意引用包名的修改,和对client jar包的导入
然后在清单文件中声明 MqttService
<service android:name=".mqtt.service.MqttService" />
注意这里的包名不一定是这个看你复制的mqtt的位置
Android mqtt 使用
ok,以上代码不报红后,可以使用了;
打开这个类MqttIn 然后看init方法,这里我的配置是写死的,你可以相应的更改
这里的serverIP 就是域名,这里我写的是我主机的ip(你如果是测试也在自己电脑上启动了activemq服务器,就填写自己电脑的ip地址),注意如果用自己的电脑当服务器,用手机去链接的话注意把电脑的防火墙关了 ,如果是模拟器就不需要(因为模拟器的网关还是在你的电脑中)
port端口号就是我们上面提到的matt端口配置相应的数字,如果你改了activemq.xml的mqtt端口地址,这里就也需要改;其他的配置就是心跳和自启动,看英文字面很好懂;
在Application中初始化这个
然后清单文件记得将这个Application注册一下
链接服务器的方法
MqttIn.getInstends(mContext).connect();
订阅的方法
MqttIn.getInstends(mContext).subscribe(new String[]{"zhs2"},new int[]{0},null,new MqttActionListener(MqttActionListener.TYPE.SUBCRIBE));
发布的方法
MqttIn.getInstends(mContext).subscribe(new String[]{"zhs2"},new int[]{0},null,new MqttActionListener(MqttActionListener.TYPE.SUBCRIBE));
MqttCallBackListener这个类看接收到的消息
MqttActionListener这个类对动作的监听
注意是先链接 然后执行其他操作
然后可以点击这个查看链接的状态,已经拥有的订阅topic
如果打印中显示了链接成功那这个里面会有链接设备的信息
这里是可以订阅的topic (注意代码中可以链接后静默订阅所有topic 看你的需求)
然后可以对你订阅的topic发一个信息,测试你的手机是否能收到
显示如下界面
然后看你日志是否打印 华为手机真的牛逼!!!
反正我是打印了
有问题欢迎垂询
路还很长,慢慢走