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

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

这里讲一些安装与配置

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

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

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

反正我是打印了

有问题欢迎垂询

路还很长,慢慢走

发布了32 篇原创文章 · 获赞 18 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览