这个小程序是我导师给我布置的一个任务,网上教程不是很多,遇到的一些困难都是自己解决的,所以写出来分享一下,有什么问题大家可以留言,尽力帮大家解决。

首先,我们需要先下载activeMQ
(官网:http://activemq.apache.org/download.html)

来到解压目录下,进入bin目录下的win64文件夹(如何是32位机器则进入win32),运行activemq.bat。如果出现拒绝访问则右键以管理员身份运行,出现下图时说明activemq启动成功。

移动端的下载地址 https://github.com/nymar123/MqttPusher

服务器启动成功后,即可打开移动端点击对应按钮进行连接。

如何出现MqttException的异常,就是连接服务器失败, 请检查服务器是否打开以及URL和端口是否正确

连接成功后,移动端就可以接收activeMQ消息服务器上传过来的消息,效果图如下

我用的是org.eclipse.paho.client.mqttv3,里面封装了MqttClient、MqttConnection、MqttTopic、MqttMessage等类,附带下service的代码,带有比较详细的注解,可以看下各种类的作用,有需要的可以去查下源码

public class MQTTService extends Service {//消息服务器的URLpublic static final String BROKER_URL = "tcp://192.168.191.6:1883";//客户端ID,用来标识一个客户,可以根据不同的策略来生成public static final String clientId = "android-client";//订阅的主题名public static final String TOPIC = "test";//mqtt客户端类private MqttClient mqttClient;//mqtt连接配置类private MqttConnectOptions options;  private String userName = "admin";private String passWord = "password";public IBinder onBind(Intent intent) {return null;}@Overridepublic void onStart(Intent intent, int startId) {try {//在服务开始时new一个mqttClient实例,客户端ID为clientId,第三个参数说明是持久化客户端,如果是null则是非持久化mqttClient = new MqttClient(BROKER_URL, clientId, new MemoryPersistence());// MQTT的连接设置  options = new MqttConnectOptions();  // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接 //换而言之,设置为false时可以客户端可以接受离线消息options.setCleanSession(false);  // 设置连接的用户名  options.setUserName(userName);  // 设置连接的密码  options.setPassword(passWord.toCharArray());  // 设置超时时间 单位为秒  options.setConnectionTimeout(10);  // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制  options.setKeepAliveInterval(20);  // 设置回调  回调类的说明看后面mqttClient.setCallback(new PushCallback(this));  MqttTopic topic = mqttClient.getTopic(TOPIC);  //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息    options.setWill(topic, "close".getBytes(), 2, true); //mqtt客户端连接服务器mqttClient.connect(options);//mqtt客户端订阅主题//在mqtt中用QoS来标识服务质量//QoS=0时,报文最多发送一次,有可能丢失//QoS=1时,报文至少发送一次,有可能重复//QoS=2时,报文只发送一次,并且确保消息只到达一次。int[] Qos  = {1};  String[] topic1 = {TOPIC};  mqttClient.subscribe(topic1, Qos); } catch (MqttException e) {Toast.makeText(getApplicationContext(), "Something went wrong!" + e.getMessage(), Toast.LENGTH_LONG).show();e.printStackTrace();}super.onStart(intent, startId);}@Overridepublic void onDestroy() {try {mqttClient.disconnect(0);} catch (MqttException e) {Toast.makeText(getApplicationContext(), "Something went wrong!" + e.getMessage(), Toast.LENGTH_LONG).show();e.printStackTrace();}}
}
public class PushCallback implements MqttCallback {//回调方法类需要实现MqttPushBack接口,用于消息推送过程中某一事件触发后进行相应的处理private ContextWrapper context;public PushCallback(ContextWrapper context) {this.context = context;}@Overridepublic void connectionLost(Throwable cause) {//连接断开时的回调方法,可以在这里重新连接}@SuppressLint("NewApi")@Overridepublic void messageArrived(MqttTopic topic, MqttMessage message) throws Exception {//有新消息到达时的回调方法final NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);final Notification notification; final Intent intent = new Intent(context, BlackIceActivity.class);final PendingIntent activity = PendingIntent.getActivity(context, 0, intent, 0);Notification.Builder builder = new Notification.Builder(context)  .setAutoCancel(true)  .setContentTitle("Message")  .setContentText(new String(message.getPayload()) + " ")  .setContentIntent(activity)  .setSmallIcon(R.drawable.snow)  .setWhen(System.currentTimeMillis())  .setOngoing(true);  notification=builder.getNotification();notification.flags |= Notification.FLAG_AUTO_CANCEL;notification.number += 1;notificationManager.notify(0, notification);}@Overridepublic void deliveryComplete(MqttDeliveryToken token) {//成功发布某一消息后的回调方法}
}

这里顺带介绍下activeMQ的web console,通过它我们可以很快捷轻松地来发布推送的内容。

用浏览器打开127.0.0.1:8161/admin(具体URL取决于部署IP),登陆的用户名密码默认均为admin

我们可以看到当前服务器中存在的topic,在subscribers页面下我们还可以看到订阅者的列表

那么如何发布消息呢?在topic页面下点击某一topic

这里有很多属性可以根据自己的需要进行设置,点击send就可以对该topic的订阅用户进行推送了

MQTT+ActiveMQ实现消息推送(移动端)相关推荐

  1. MQTT+ActiveMQ实现消息推送

    https://blog.csdn.net/m15927408113/article/details/71438922 https://blog.csdn.net/RichieZhu/article/ ...

  2. mqtt消息推送 java_MQTT+ActiveMQ实现消息推送(服务器端java实现)

    上一篇文章已经介绍了mqtt+activemq实现消息推送移动端的实现,也介绍了利用自带的web console进行消息发布的方法.但是在具体的项目应用中,当我们将需要将该消息推送模块嵌入到一个后台管 ...

  3. Android平台上使用MQTT协议实现消息推送功能

    MQTT实现消息推送,效果如下 服务端下载地址:http://activemq.apache.org/download-archives.html jar包地址 百度网盘:https://pan.ba ...

  4. Android 二维码被扫后接收通知(使用MQTT协议实现消息推送)

    现如今扫码付款和收款已经很便利了,比如超市买完东西付款时有两种方式 : 顾客可以出示付款码给收银员扫码收款,也可以由顾客扫描超市的收款码进行付款 .两种方式在付款完成后超市端会进行语音播报收到xx元. ...

  5. 基于mqtt协议的消息推送服务器,基于 MQTT 协议的推送服务

    一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...

  6. mysql active推送消息_java实现基于activeMQ的消息推送

    一. jar包介绍 1. 点击此下载 apache-activemq-5.3.0,得到: activemq-all-5.3.0.jar activemq-web-5.3.0.jar 2. spring ...

  7. 关于MQTT协议实现消息推送系统

    查看全文 http://www.taodudu.cc/news/show-4956774.html 相关文章: 第二十三天:JavaEE规范+Tomcat+Http协议 MMS协议详解 linux版格 ...

  8. 安卓app如何利用MQTT实现安卓消息推送

    https://www.jianshu.com/p/fce737cf2e46?utm_source=oschina-app

  9. Activemq MQTT 简单消息推送示例

    Activemq MQTT 简单消息推送示例 简介     简单使用 MQTT 连接 Activemq 进行消息推送的示例代码 编写详情 环境准备     使用docker启动Activemq,查看M ...

最新文章

  1. Python_note1
  2. openMP的一点使用经验 四
  3. python【蓝桥杯vip练习题库】ALGO-236大小写转换
  4. script的加载方式与执行
  5. 添加FB登陆时,需要curl扩展
  6. VGA、DVI、HDMI三种视频信号接口差别
  7. android 通讯录字母排序,Android仿微信联系人字母排序效果
  8. gc就是fullgc吗 major_线上出现fullgc问题如何排查?
  9. Xamarin:安卓通过“第三发应用打开”实现文件跨应用传输
  10. 在windows文件系统中加右键执行程序
  11. 结构体struct的定义和使用
  12. 字符串的切割操作(strtok,split)
  13. C# CharacterToBinary 将类似2进制字符串 10010110111 转换为数值型源码
  14. 新冠感染池检测选取最优池检测人数(概率模型理论公式+蒙特卡洛matlab仿真)
  15. 如何切换DNN编辑器
  16. python贪吃蛇游戏设计答辩_python编写贪吃蛇游戏
  17. 【复盘】目前实训三班级复盘遇到的问题
  18. win10 软路由_带你入门软路由 篇一:为什么需要软路由?
  19. PAT乙级10015题——C语言
  20. AndroidManifest.xml文件解析(详解)

热门文章

  1. [事件处理] js实现的文本框内容发生改变立马触发事件简单介绍
  2. 不知道如何进行图片文字翻译?看完这篇你就知道了
  3. IDEA 配置 JDK 源码
  4. 平板上pyto软件_平板电脑性价比排行大更新!
  5. python--Django网站开发(1)
  6. python自动填表格_Windows下使用python3 + selenium实现网页自动填表功能
  7. MySQL引擎的理解
  8. 竞品分析的意义在哪?竞品分析后怎样优化店铺,竞品分析哪里找?
  9. 快捷键创建文件夹_一键创建复杂的文件夹结构
  10. 【Python】windows下Eclipse中安装集成webpy框架