Android使用Mqtt协议连接ActiveMQ服务器实现推送

Android使用Mqtt协议连接ActiveMQ服务器实现推送

MQTT (Message Queuing Telemetry Transport,消息队列遥测传输) 是一种标准化的发布/订阅消息传输协议,设计于1999年,最初是为了在卫星之类的物体上使用。它是一个很是轻量级的协议,因为对带宽需求很低,从而成为了 M2M 通讯或物联网应用的理想选择,如今已经成为这类场景最多见的协议之一。html

ActiveMQ 是一个 MOM(Message Orient middleware),具体来讲是一个实现了 JMS 规范的系统间远程通讯的消息代理。java

  • MQTT
  • ActiveMQ
  • Android mqtt 源码
  • Android mqtt 使用

MQTT

MQTT协议是为大量计算能力有限,且工做在低带宽、不可靠的网络的远程传感器和控制设备通信而设计的协议,它具备如下主要的几项特性:android

一、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;web

二、对负载内容屏蔽的消息传输;apache

三、使用 TCP/IP 提供网络链接;浏览器

四、有三种消息发布服务质量:安全

1) “至多一次”,消息发布彻底依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于以下情 况,环境传感器数据,丢失一次读记录无所谓,由于不久后还会有第二次发送。
2) “至少一次”,确保消息到达,但消息重复可能会发生。
3) “只有一次”,确保消息到达一次。这一级别可用于以下状况,在计费系统中,消息重复或丢失会致使不正确的结果。

五、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以下降网络流量;服务器

六、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;网络

android中使用mqtt协议须要导入一个jar包
下载jar包 能够下载最新的,而后导入你的Android工程中eclipse

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实现,它很是快速,支持多种语言的客户端和协议,并且能够很是容易的嵌入到企业的应用环境中,并有许多高级功能。

这里讲一些安装与配置

下载ActiveMQ

下载后的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发一个信息,测试你的手机是否能收到

这里写图片描述
显示以下界面
这里写图片描述

而后看你日志是否打印 华为手机真的牛逼!!!

反正我是打印了

有问题欢迎垂询

路还很长,慢慢走