MQTT (Message Queuing Telemetry Transport,消息队列遥测传输) 是一种标准化的发布/订阅消息传输协议,设计于1999年,最初是为了在卫星之类的物体上使用。它是一个很是轻量级的协议,因为对带宽需求很低,从而成为了 M2M 通讯或物联网应用的理想选择,如今已经成为这类场景最多见的协议之一。html
ActiveMQ 是一个 MOM(Message Orient middleware),具体来讲是一个实现了 JMS 规范的系统间远程通讯的消息代理。java
MQTT协议是为大量计算能力有限,且工做在低带宽、不可靠的网络的远程传感器和控制设备通信而设计的协议,它具备如下主要的几项特性:android
一、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;web
二、对负载内容屏蔽的消息传输;apache
三、使用 TCP/IP 提供网络链接;浏览器
四、有三种消息发布服务质量:安全
1) “至多一次”,消息发布彻底依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于以下情 况,环境传感器数据,丢失一次读记录无所谓,由于不久后还会有第二次发送。 2) “至少一次”,确保消息到达,但消息重复可能会发生。 3) “只有一次”,确保消息到达一次。这一级别可用于以下状况,在计费系统中,消息重复或丢失会致使不正确的结果。
五、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以下降网络流量;服务器
六、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;网络
android中使用mqtt协议须要导入一个jar包
下载jar包 能够下载最新的,而后导入你的Android工程中eclipse
⒈ 多种语言和协议编写客户端。语言: 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为须要验证,相反就是不须要
先肯定你下载了mqtt的jar包并引入你的项目中了,而后如下是源码
代码包会放在的下载资源中 下载地址 下载后直接复制在你的项目中便可,注意引用包名的修改,和对client jar包的导入
而后在清单文件中声明 MqttService
<service android:name=".mqtt.service.MqttService" />
注意这里的包名不必定是这个看你复制的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发一个信息,测试你的手机是否能收到
显示以下界面
而后看你日志是否打印 华为手机真的牛逼!!!
反正我是打印了
有问题欢迎垂询
路还很长,慢慢走