`

activeMQ 推送之mqtt客户端

阅读更多

使用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

  • 大小: 36.2 KB
  • 大小: 166.9 KB
  • 大小: 35.7 KB
  • 大小: 40.3 KB
2
0
分享到:
评论
19 楼 hw1287789687 2017-05-11  
jackyx 写道
你好,请问有IOS和推送后台(服务器端)的资料吗?

最新代码:https://github.com/liuyu520/mqtt_client_swing.git
18 楼 hw1287789687 2017-05-11  
zhaoke2011 写道
运行你的那个20150621 的,提示错误: 找不到或无法加载主类 com.mqtt.hw.MqttClientSwing,新手 求教  qq  502727023 谢谢

最新代码:https://github.com/liuyu520/mqtt_client_swing.git
17 楼 hw1287789687 2017-05-11  
bbsanwei 写道
如果客户端下线了,上线后,消息还会推送给他吗,这个有设置吗

最新代码:https://github.com/liuyu520/mqtt_client_swing.git
16 楼 Yunba云巴 2016-12-05  
bbsanwei 写道
如果客户端下线了,上线后,消息还会推送给他吗,这个有设置吗


我们也是基于MQTT协议实现的实时通信系统,消息推送只是我们其中的一项产品服务。

实现Android推送方面,客户端在集成我们的 Android SDK后,服务端便可通过 SDK 或使用 RESTful API,向 Android 客户端发消息。

为了保证消息的实时性,我们Android SDK 会启动一个后台的 Service,创建并保持到云巴https://yunba.io/服务器的长连接,从而保证了消息推送的实时性。

同样为了保证消息能够被送达,我们 SDK 支持 离线消息 的功能,可保证消息送达客户端。

也就是说,在推送消息时,如果客户端当前不在线,消息将暂存在云巴服务器上(多达 50 条,长达 15 天)。 当客户端上线并成功连接到云巴的服务器后,服务器会把离线消息推送给该客户端。客户端成功接收后,服务器才会删除保存的离线消息。

iOS推送同理,除此以外,我们的 SDK 集成了 APNs,这样开发者就无需开发与 APNs 对接的模块,也不必自己负责 Device Token 的更新。
15 楼 bbsanwei 2016-08-23  
如果客户端下线了,上线后,消息还会推送给他吗,这个有设置吗
14 楼 a406979945 2016-01-12  
你好,这个swing的消息推送与接收都能连接到服务器  但是消息发送出来 后 并不能接收到,
13 楼 zhaoke2011 2015-08-08  
运行你的那个20150621 的,提示错误: 找不到或无法加载主类 com.mqtt.hw.MqttClientSwing,新手 求教  qq  502727023 谢谢
11 楼 hw1287789687 2015-06-21  
最新的源代码 下载地址:http://pan.baidu.com/s/1sjLYibb
10 楼 hw1287789687 2015-06-21  
jackyx 写道
import com.swing.component.AssistPopupTextPane
没找到这个包呢,能否发一份最新完整的给我

这个类在附件的io0007-find_progess-0.0.8.4-SNAPSHOT.jar
9 楼 c1007857613 2015-06-05  
引用
    
8 楼 hw1287789687 2014-09-30  
jackyx 写道
你好,请问有IOS和推送后台(服务器端)的资料吗?

ios 推送资料下载地址:http://pan.baidu.com/s/1i35kRch
7 楼 hw1287789687 2014-09-30  
import com.swing.component.AssistPopupTextPane 所在的jar包下载地址:
http://pan.baidu.com/s/1mghyjUw ,http://pan.baidu.com/s/1c0y90u0
mqtt推送详解.zip  下载地址:http://pan.baidu.com/s/1o6r31Ui
6 楼 hw1287789687 2014-09-30  
jackyx 写道
import com.swing.component.AssistPopupTextPane
没找到这个包呢,能否发一份最新完整的给我

http://pan.baidu.com/s/1hqlAekW
5 楼 jackyx 2014-09-28  
你的jar不全,能否提供下载?
4 楼 jackyx 2014-09-28  
import com.swing.component.AssistPopupTextPane
没找到这个包呢,能否发一份最新完整的给我
3 楼 jackyx 2014-09-28  
你好,请问有IOS和推送后台(服务器端)的资料吗?
2 楼 lwhhuahua 2014-09-11  
mqtt推送详解.zip  这个附件呢?
1 楼 hw1287789687 2014-07-02  
需要什么资料可以给我留言,我还做过ios 推送后台(服务器端)

相关推荐

    MQTT客户端推送实现

    总的来说,实现MQTT客户端推送涉及客户端库的集成、连接管理、订阅与发布操作,以及可能的服务器配置。通过理解这些概念,你可以构建一个可靠的、实时的数据传输系统,适用于各种IoT和移动应用场景。

    ActiveMQ MQTT Android 客户端Demo

    - 订阅主题:使用subscribe()方法订阅感兴趣的主题,接收服务器推送的消息。 - 发布消息:使用publish()方法向服务器发布消息。 - 断开连接:在不需要通信时,应调用disconnect()方法关闭连接。 5. **Android...

    基于activemq实现Android推送(服务端+客户端)

    最后,我们可以看到"demo"文件夹中可能包含了一个简单的示例项目,展示如何在Android客户端和服务端实现基于ActiveMQ和MQTT的推送功能。这个示例代码会帮助初学者更好地理解上述概念,并动手实践。 总结来说,利用...

    基于MQTT协议的推送

    综上所述,"基于MQTT协议的推送"涉及的知识点涵盖了MQTT协议的基础原理、核心特性如发布/订阅模型、QoS服务质量、Topic、保留和遗嘱消息,以及如何利用Java Swing构建MQTT客户端进行消息的收发演示。通过这样的实践...

    MQTT测试工具

    项目中有用到mqtt推送消息,后台发送到mqtt服务器,有其他客户端或者设备订阅接收。可以通过该工具测试设置项目符合所需的具体参数值。大家可以通过该链接http://activemq.apache.org/apollo/download.html下载最新...

    MQTT+springboot 订阅/发布 多主题

    在MQTT场景中,Spring Boot可以通过添加相关依赖来集成MQTT客户端库,如Paho或Eclipse Mosquitto,以实现MQTT连接和操作。 3. **主题**:在MQTT协议中,主题是消息路由的关键。主题字符串类似于文件路径,由点分隔...

    ActiveMQ实现Android端的消息推送,包含Android端和Server端的代码和使用说明

    Android端采用MQTT实现了消息的接收,接收消息的回调是messageArrived方法。 Server端的简要使用说明如下: 1、解压安装文件,执行\apache-activemq-5.13.3-bin\apache-activemq-5.13.3\bin\win64\wrapper.exe. 2、...

    MQTTClient-QTDEMO.rar

    MQTT客户端是连接到MQTT服务器(也称为消息代理,如Apache ActiveMQ或IBM MessageSight)的软件实体,负责发布消息、订阅主题以及接收消息。客户端通常需要实现以下核心功能: - 连接和断开与服务器的连接。 - 订阅...

    SpringMVC+Spring+Mybatis框架整合Mqttt通信协议+ActiveMQ作为中间件进行消息的发布与订阅

    单片机部分采用MQTT协议将主题消息发布到队列中,java部分也采用MQTT协议进行处理,整合MQTT协议, 具体这个资源是干什么的,请查看博客: https://blog.csdn.net/qq_34178998/article/details/93158429

    AndroidMqtt源码

    - 订阅主题:使用 subscribe() 方法订阅感兴趣的 MQTT 主题,服务器将在此主题上发布的消息推送给订阅者。 - 消息确认:根据 QoS 等级,客户端可能需要对收到的消息进行确认,保证消息的可靠传输。 **5. MQTT 与 ...

    基于ActiveMQ的安卓端消息推送研究与实现.pdf

    伴随着互联网的飞速发展,特别是在近几年中,移动互联网的发展更为迅猛。...本文介绍了ActiveMQ的这种开源项目的应用,通过ActiveMQ这种基于MQTT协议的开源框架来实现对安卓手机客户端实时的消息推送技术。

    java消息推送

    Java可以通过Paho库来实现MQTT客户端,用于订阅和发布消息。 4. Apache ActiveMQ: - 这是一个开源的消息代理,实现了JMS规范,可以用于构建消息推送系统。服务器端可以通过ActiveMQ发送消息,客户端订阅特定主题...

    mqtt消息推送android实例

    mqtt协议时IBM开发的一个协议,facebook的android客户端message即时...这段代码可以实现android的消息推送。还可以在此基础实现即时通讯,在运行这段代码,还需要安装activeMQ服务器。下载地址http://activemq.apache.org/

    apollo+mqtt.jar

    本文将详细介绍如何使用 Apollo 的 MQTT 实现 Android 应用的消息推送,以及如何搭建 MQTT 服务器环境。 首先,我们来看 Apollo。Apollo 是 ActiveMQ 的分支,由 LinkedIn 开发,旨在提供低延迟、高吞吐量的消息...

    采用MQTT协议实现Android消息推送.docx

    本文将探讨如何采用MQTT协议实现Android消息推送,并对比...综上所述,MQTT协议结合ActiveMQ,为Android消息推送提供了高效、可靠的解决方案。在实际应用中,可以根据具体需求和环境选择合适的MQTT实现库和消息中间件。

    MQTT协议通讯,支持JS、JAVA、微信小程序客户端

    **MQTT客户端**通常用来与MQTT Broker建立连接,并进行消息的发布和订阅。此案例中提到了几种不同的客户端实现方式: 1. **JS客户端**: 使用Eclipse Paho提供的JavaScript客户端库。 - **库**: Eclipse Paho MQTT ...

    ActiveMq安卓端

    通过以上步骤,安卓应用就可以利用ActiveMQ实现实时消息推送,比如实时聊天、通知推送等功能。在实际应用中,还可以结合其他技术,如WebSocket,以实现更丰富的交互体验。 总之,ActiveMQ在安卓端的应用为开发者...

    vue使用stompjs实现mqtt消息推送通知

    Vue.js作为一个轻量级的前端框架,结合Stompjs和MQTT协议,可以构建高效、低延迟的消息推送系统。本篇文章将详细介绍如何在Vue项目中使用Stompjs来实现MQTT消息推送通知。 首先,我们需要了解MQTT(Message Queuing...

Global site tag (gtag.js) - Google Analytics