`

activeMQ 推送之mqtt客户端2

阅读更多

使用activeMQ进行android推送时需要如下问题

(1)activeMQ后台报错:Frame size of 257 MB larger than max allowed 100 MB

详细错误信息:

WARN  | Transport Connection to: tcp://127.0.0.1:50916 failed: java.io.IOException: Frame size of 257 MB larger than max allowed 100 MB | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///127.0.0.1:50916@61616

 解决方法:

修改配置文件apache-activemq-5.9.0-bin\apache-activemq-5.9.0\conf\activemq.xml

 <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=1048576000"/>

maxFrameSize 调大一些.

(2)mqtt 客户端如何设置用户名和密码

/***
	 * 客户端和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);
            String username=usernameTextField.getText();
            String password=passwordTextField.getText();
            if(ValueWidget.isNullOrEmpty(username)){
            	username=null;
            }
            if(ValueWidget.isNullOrEmpty(password)){
            	password=null;
            }else{
            	options.setPassword(password.toCharArray());
            }
            options.setUserName(username);
            
            //推送回调类,在此类中处理消息,用于消息监听
            mqttClient.setCallback(new MyCallBack(MqttClientSwing.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;
	}

 

(3)发布者如何设置密码

/**
	 * 初始化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, false);
		// System.out.println(message);
		String brokerUrl = String.format(BROKER_URL,
				serverIpTextField.getText());
		
		 String username=usernameTextField.getText();
         String password=passwordTextField.getText();
         if(ValueWidget.isNullOrEmpty(username)){
         	username=null;
         }
         if(ValueWidget.isNullOrEmpty(password)){
         	password=null;
         }
         
		// 创建链接工厂
		TopicConnectionFactory factory = new ActiveMQConnectionFactory(
				username,
				password, brokerUrl);
		ComponentUtil.appendResult(resultTextArea, "activeMQ url:" + brokerUrl,
				true);
		// 通过工厂创建一个连接
		connection = factory.createTopicConnection();
		// 启动连接
		connection.start();
		ComponentUtil.appendResult(resultTextArea, "启动connection 成功", true);
		// 创建一个session会话 transacted
		session = connection.createTopicSession(
				transacted /* Boolean.FALSE */, Session.AUTO_ACKNOWLEDGE);

	}

 

 

1
1
分享到:
评论
7 楼 Yunba云巴 2016-12-13  
我们云巴https://yunba.io/也是基于MQTT协议实现的消息推送功能呢,当然不仅仅局限于Android推送,同样也拥有iOS推送功能。

对于Android推送来说,客户端集成了我们云巴https://yunba.io/的 Android SDK后,服务端可通过 SDK 或使用 RESTful API,向 Android 客户端发消息。在提高消息的实时性以及到达率方面,我们采取的措施是启动一个后台的 Service,创建并保持到服务器的长连接,以及支持离线消息。

除此以外,我们还一键集成第三方推送(目前是华为、小米)功能,最大程度保证到达率。
6 楼 hw1287789687 2014-10-10  
5 楼 hw1287789687 2014-10-10  
缺少jar包,把activemq-all-x.x.jar 添加到classpath 里
同时,检查一下java运行级别,运行级别应该是java 1.6
4 楼 Bigfeetliu 2014-10-10  
连不上,报错!貌似是TopicConnectionFactory类的问题,不知道如何解决啊


Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/management/j2ee/statistics/Stats
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.mqtt.hw.pusher.PusherApp.init(PusherApp.java:117)
at com.mqtt.hw.pusher.PusherApp.access$7(PusherApp.java:100)
at com.mqtt.hw.pusher.PusherApp$5.actionPerformed(PusherApp.java:306)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javax.management.j2ee.statistics.Stats
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 51 more
3 楼 hw1287789687 2014-09-30  
jackyx 写道
提示无法连接到服务器,已确定服务器端已经存在,并且服务器端的管理网页可以打开,服务也正常启动,是否在客户端连接的时候的URL有问题还是?

参考:
http://hw1287789687.iteye.com/blog/2067736
http://www.yunmasoft.com
2 楼 jackyx 2014-09-29  
提示无法连接到服务器,已确定服务器端已经存在,并且服务器端的管理网页可以打开,服务也正常启动,是否在客户端连接的时候的URL有问题还是?
1 楼 jackyx 2014-09-29  
这个我试下了,没显示连接成功还是失败

相关推荐

    activeMQ 推送之mqtt客户端

    标题中的“ActiveMQ推送之mqtt客户端”指的是使用ActiveMQ消息中间件进行MQTT协议的客户端实现。ActiveMQ是Apache组织开发的一个开源、跨平台的消息传递系统,它支持多种消息协议,其中包括轻量级的MQTT(Message ...

    MQTT客户端推送实现

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

    ActiveMQ MQTT Android 客户端Demo

    2. **ActiveMQ MQTT客户端**:ActiveMQ提供了对MQTT的支持,开发者可以通过Java或Android SDK与其交互。在Android上,我们需要找到适用于Android平台的MQTT客户端库,如Paho MQTT Android Service。 3. **Paho MQTT...

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

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

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

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

    基于MQTT协议的推送

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

    MQTT+springboot 订阅/发布 多主题

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

    MQTT测试工具

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

    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)的软件实体,负责发布消息、订阅主题以及接收消息。客户端通常需要实现以下核心功能: - 连接和断开与服务器的连接。 - 订阅...

    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