使用activeMQ进行android推送
activeMQ下载地址:http://activemq.apache.org/download.html
下载后是一个压缩包:apache-activemq-5.9.0-bin.zip
启动方式:
解压缩,进入apache-activemq-5.9.0-bin\apache-activemq-5.9.0\bin,双击activemq.bat,即可启动activeMQ服务
启动之后:
android客户端推送采用mqtt(paho-mqtt-client-1.0.1.jar),依赖包见附件
但是为了测试,我写了一个swing图形界面,充当手机客户端,依赖的jar包仍然是paho-mqtt-client-1.0.1.jar.界面如下:
使用方法:点击[启动]按钮,开始接收推送消息
对应的主类是:MqttSwing,用于接收推送消息.
我还写了一个发送推送消息的swing图形界面,充当推送后管系统,界面如下:
使用方法:点击[连接]按钮,才可以发送推送消息
对应的主类:PusherApp,用于发送推送消息.
核心代码介绍如下.
客户端连接activeMQ,建立连接(只有建立连接,才能接收到推送消息)
方法名:connect,做了两件事:(1)建立连接;(2)订阅主题(topic)
/*** * 客户端和activeMQ服务器建立连接 * @param BROKER_URL * @param clientId : 用于标识客户端,相当于ios中的device token * @param TOPIC * @param isCleanSession :false--可以接受离线消息; * @return 是否启动成功 */ private boolean connect(String BROKER_URL,String clientId,String TOPIC,boolean isCleanSession){ try { ComponentUtil.appendResult(resultTextPane, "connect time:"+TimeHWUtil.getCurrentMiniuteSecond(), true); mqttClient = new MqttClient(BROKER_URL, clientId, new MemoryPersistence()); MqttConnectOptions options= new MqttConnectOptions(); options.setCleanSession(isCleanSession);//mqtt receive offline message ComponentUtil.appendResult(resultTextPane, "isCleanSession:"+isCleanSession, true); options.setKeepAliveInterval(30); //推送回调类,在此类中处理消息,用于消息监听 mqttClient.setCallback(new MyCallBack(MqttSwing.this)); boolean isSuccess=false; try { mqttClient.connect(options);//CLIENT ID CAN NOT BE SAME isSuccess=true; } catch (Exception e) { if(isPrintException){ e.printStackTrace(); } } if(!isSuccess){ String message="连接失败,请检查client id是否重复了 或者activeMQ是否启动"; ComponentUtil.appendResult(resultTextPane, message, true); GUIUtil23.warningDialog(message); return false; }else{ //Subscribe to topics mqttClient.subscribe(new String[]{TOPIC,clientId}); System.out.println("topic:"+TOPIC+", "+(clientId)); ComponentUtil.appendResult(resultTextPane, "TOPIC:"+TOPIC+", "+(clientId), true); } } catch (MqttException e) { if(isPrintException){ e.printStackTrace();} GUIUtil23.errorDialog(e.getMessage()); return false; } return true; }
推送消息到来时的回调类:MyCallBack
package com.mqtt.hw.callback; import org.apache.commons.lang.StringEscapeUtils; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttTopic; import com.mqtt.hw.MqttSwing; import com.time.util.TimeHWUtil; public class MyCallBack implements MqttCallback { private MqttSwing mqttSwing; public MyCallBack(MqttSwing mqttSwing) { super(); this.mqttSwing = mqttSwing; } @Override public void connectionLost(Throwable cause) { } @Override public void messageArrived(MqttTopic topic, MqttMessage message) throws Exception { System.out.println("messageArrived...."+TimeHWUtil.getCurrentMiniuteSecond()); String messageStr=StringEscapeUtils.unescapeHtml(new String(message.getPayload())); System.out.println("message:"+messageStr); this.mqttSwing.receiveMessage(messageStr); //使窗口处于激活状态 } @Override public void deliveryComplete(MqttDeliveryToken token) { } }
推送者与activeMQ建立连接:
/** * 初始化connection和session * * @throws Exception */ private void init(/* String mqIp,boolean transacted */) throws Exception { if (!DialogUtil.verifyTFEmpty(serverIpTextField, "服务器ip")) { return; } String transactedStr = transactedTextField.getText(); boolean transacted = false; if (ValueWidget.isNullOrEmpty(transactedStr)) { transacted = false; } else { transacted = Boolean.parseBoolean(transactedStr); } String message = "transacted:" + transacted; ComponentUtil.appendResult(resultTextArea, message, true); System.out.println(message); String brokerUrl = String.format(BROKER_URL, serverIpTextField.getText()); // 创建链接工厂 TopicConnectionFactory factory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, brokerUrl); ComponentUtil.appendResult(resultTextArea, "url:" + brokerUrl, true); // 通过工厂创建一个连接 connection = factory.createTopicConnection(); // 启动连接 connection.start(); ComponentUtil.appendResult(resultTextArea, "启动connection 成功", true); // 创建一个session会话 transacted session = connection.createTopicSession( transacted /* Boolean.FALSE */, Session.AUTO_ACKNOWLEDGE); }
项目源代码见附件mqtt_swing.zip
手机android客户端(测试推送)见附件android-mqtt-push-master.zip
也可以从 https://github.com/tokudu/AndroidPushNotificationsDemo
下载
详细配置参阅附件mqtt推送详解.zip
依赖的jar包
io0007-find_progess-0.0.8.4-SNAPSHOT.jar
io0007-find_progess-0.0.8.4-SNAPSHOT-sources.jar
---2017年5月11号更新--
最新代码:
GitHub:
https://github.com/liuyu520/mqtt_client_swing.git
https://github.com/liuyu520/io0007
相关推荐
总的来说,实现MQTT客户端推送涉及客户端库的集成、连接管理、订阅与发布操作,以及可能的服务器配置。通过理解这些概念,你可以构建一个可靠的、实时的数据传输系统,适用于各种IoT和移动应用场景。
- 订阅主题:使用subscribe()方法订阅感兴趣的主题,接收服务器推送的消息。 - 发布消息:使用publish()方法向服务器发布消息。 - 断开连接:在不需要通信时,应调用disconnect()方法关闭连接。 5. **Android...
最后,我们可以看到"demo"文件夹中可能包含了一个简单的示例项目,展示如何在Android客户端和服务端实现基于ActiveMQ和MQTT的推送功能。这个示例代码会帮助初学者更好地理解上述概念,并动手实践。 总结来说,利用...
综上所述,"基于MQTT协议的推送"涉及的知识点涵盖了MQTT协议的基础原理、核心特性如发布/订阅模型、QoS服务质量、Topic、保留和遗嘱消息,以及如何利用Java Swing构建MQTT客户端进行消息的收发演示。通过这样的实践...
项目中有用到mqtt推送消息,后台发送到mqtt服务器,有其他客户端或者设备订阅接收。可以通过该工具测试设置项目符合所需的具体参数值。大家可以通过该链接http://activemq.apache.org/apollo/download.html下载最新...
在MQTT场景中,Spring Boot可以通过添加相关依赖来集成MQTT客户端库,如Paho或Eclipse Mosquitto,以实现MQTT连接和操作。 3. **主题**:在MQTT协议中,主题是消息路由的关键。主题字符串类似于文件路径,由点分隔...
Android端采用MQTT实现了消息的接收,接收消息的回调是messageArrived方法。 Server端的简要使用说明如下: 1、解压安装文件,执行\apache-activemq-5.13.3-bin\apache-activemq-5.13.3\bin\win64\wrapper.exe. 2、...
MQTT客户端是连接到MQTT服务器(也称为消息代理,如Apache ActiveMQ或IBM MessageSight)的软件实体,负责发布消息、订阅主题以及接收消息。客户端通常需要实现以下核心功能: - 连接和断开与服务器的连接。 - 订阅...
单片机部分采用MQTT协议将主题消息发布到队列中,java部分也采用MQTT协议进行处理,整合MQTT协议, 具体这个资源是干什么的,请查看博客: https://blog.csdn.net/qq_34178998/article/details/93158429
- 订阅主题:使用 subscribe() 方法订阅感兴趣的 MQTT 主题,服务器将在此主题上发布的消息推送给订阅者。 - 消息确认:根据 QoS 等级,客户端可能需要对收到的消息进行确认,保证消息的可靠传输。 **5. MQTT 与 ...
伴随着互联网的飞速发展,特别是在近几年中,移动互联网的发展更为迅猛。...本文介绍了ActiveMQ的这种开源项目的应用,通过ActiveMQ这种基于MQTT协议的开源框架来实现对安卓手机客户端实时的消息推送技术。
Java可以通过Paho库来实现MQTT客户端,用于订阅和发布消息。 4. Apache ActiveMQ: - 这是一个开源的消息代理,实现了JMS规范,可以用于构建消息推送系统。服务器端可以通过ActiveMQ发送消息,客户端订阅特定主题...
mqtt协议时IBM开发的一个协议,facebook的android客户端message即时...这段代码可以实现android的消息推送。还可以在此基础实现即时通讯,在运行这段代码,还需要安装activeMQ服务器。下载地址http://activemq.apache.org/
本文将详细介绍如何使用 Apollo 的 MQTT 实现 Android 应用的消息推送,以及如何搭建 MQTT 服务器环境。 首先,我们来看 Apollo。Apollo 是 ActiveMQ 的分支,由 LinkedIn 开发,旨在提供低延迟、高吞吐量的消息...
本文将探讨如何采用MQTT协议实现Android消息推送,并对比...综上所述,MQTT协议结合ActiveMQ,为Android消息推送提供了高效、可靠的解决方案。在实际应用中,可以根据具体需求和环境选择合适的MQTT实现库和消息中间件。
**MQTT客户端**通常用来与MQTT Broker建立连接,并进行消息的发布和订阅。此案例中提到了几种不同的客户端实现方式: 1. **JS客户端**: 使用Eclipse Paho提供的JavaScript客户端库。 - **库**: Eclipse Paho MQTT ...
通过以上步骤,安卓应用就可以利用ActiveMQ实现实时消息推送,比如实时聊天、通知推送等功能。在实际应用中,还可以结合其他技术,如WebSocket,以实现更丰富的交互体验。 总之,ActiveMQ在安卓端的应用为开发者...
Vue.js作为一个轻量级的前端框架,结合Stompjs和MQTT协议,可以构建高效、低延迟的消息推送系统。本篇文章将详细介绍如何在Vue项目中使用Stompjs来实现MQTT消息推送通知。 首先,我们需要了解MQTT(Message Queuing...