使用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&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); }
相关推荐
标题中的“ActiveMQ推送之mqtt客户端”指的是使用ActiveMQ消息中间件进行MQTT协议的客户端实现。ActiveMQ是Apache组织开发的一个开源、跨平台的消息传递系统,它支持多种消息协议,其中包括轻量级的MQTT(Message ...
总的来说,实现MQTT客户端推送涉及客户端库的集成、连接管理、订阅与发布操作,以及可能的服务器配置。通过理解这些概念,你可以构建一个可靠的、实时的数据传输系统,适用于各种IoT和移动应用场景。
2. **ActiveMQ MQTT客户端**:ActiveMQ提供了对MQTT的支持,开发者可以通过Java或Android SDK与其交互。在Android上,我们需要找到适用于Android平台的MQTT客户端库,如Paho MQTT Android Service。 3. **Paho MQTT...
最后,我们可以看到"demo"文件夹中可能包含了一个简单的示例项目,展示如何在Android客户端和服务端实现基于ActiveMQ和MQTT的推送功能。这个示例代码会帮助初学者更好地理解上述概念,并动手实践。 总结来说,利用...
综上所述,"基于MQTT协议的推送"涉及的知识点涵盖了MQTT协议的基础原理、核心特性如发布/订阅模型、QoS服务质量、Topic、保留和遗嘱消息,以及如何利用Java Swing构建MQTT客户端进行消息的收发演示。通过这样的实践...
在MQTT场景中,Spring Boot可以通过添加相关依赖来集成MQTT客户端库,如Paho或Eclipse Mosquitto,以实现MQTT连接和操作。 3. **主题**:在MQTT协议中,主题是消息路由的关键。主题字符串类似于文件路径,由点分隔...
项目中有用到mqtt推送消息,后台发送到mqtt服务器,有其他客户端或者设备订阅接收。可以通过该工具测试设置项目符合所需的具体参数值。大家可以通过该链接http://activemq.apache.org/apollo/download.html下载最新...
Android端采用MQTT实现了消息的接收,接收消息的回调是messageArrived方法。 Server端的简要使用说明如下: 1、解压安装文件,执行\apache-activemq-5.13.3-bin\apache-activemq-5.13.3\bin\win64\wrapper.exe. 2、...
单片机部分采用MQTT协议将主题消息发布到队列中,java部分也采用MQTT协议进行处理,整合MQTT协议, 具体这个资源是干什么的,请查看博客: https://blog.csdn.net/qq_34178998/article/details/93158429
MQTT客户端是连接到MQTT服务器(也称为消息代理,如Apache ActiveMQ或IBM MessageSight)的软件实体,负责发布消息、订阅主题以及接收消息。客户端通常需要实现以下核心功能: - 连接和断开与服务器的连接。 - 订阅...
- 订阅主题:使用 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...