activeMQ 推送之mqtt客户端2-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

activeMQ 推送之mqtt客户端2

简介:

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

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

详细错误信息:

Java代码  收藏代码
  1. 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 客户端如何设置用户名和密码

Java代码  收藏代码
  1. /*** 
  2.      * 客户端和activeMQ服务器建立连接 
  3.      * @param BROKER_URL 
  4.      * @param clientId : 用于标识客户端,相当于ios中的device token 
  5.      * @param TOPIC 
  6.      * @param isCleanSession :false--可以接受离线消息; 
  7.      * @return 是否启动成功  
  8.      */  
  9.     private boolean connect(String BROKER_URL,String clientId,String TOPIC,boolean isCleanSession){  
  10.         try {  
  11.             ComponentUtil.appendResult(resultTextPane, "connect time:"+TimeHWUtil.getCurrentMiniuteSecond(), true);  
  12.             mqttClient = new MqttClient(BROKER_URL, clientId, new MemoryPersistence());  
  13.             MqttConnectOptions options= new MqttConnectOptions();  
  14.             options.setCleanSession(isCleanSession);//mqtt receive offline message  
  15.             ComponentUtil.appendResult(resultTextPane, "isCleanSession:"+isCleanSession, true);  
  16.             options.setKeepAliveInterval(30);  
  17.             String username=usernameTextField.getText();  
  18.             String password=passwordTextField.getText();  
  19.             if(ValueWidget.isNullOrEmpty(username)){  
  20.                 username=null;  
  21.             }  
  22.             if(ValueWidget.isNullOrEmpty(password)){  
  23.                 password=null;  
  24.             }else{  
  25.                 options.setPassword(password.toCharArray());  
  26.             }  
  27.             options.setUserName(username);  
  28.               
  29.             //推送回调类,在此类中处理消息,用于消息监听  
  30.             mqttClient.setCallback(new MyCallBack(MqttClientSwing.this));  
  31.             boolean isSuccess=false;  
  32.             try {  
  33.                 mqttClient.connect(options);//CLIENT ID CAN NOT BE SAME  
  34.                 isSuccess=true;  
  35.             } catch (Exception e) {  
  36.                 if(isPrintException){  
  37.                     e.printStackTrace();  
  38.                 }  
  39.             }  
  40.             if(!isSuccess){  
  41.                 String message="连接失败,请检查client id是否重复了 或者activeMQ是否启动";  
  42.                 ComponentUtil.appendResult(resultTextPane, message, true);  
  43.                 GUIUtil23.warningDialog(message);  
  44.                 return false;  
  45.             }else{  
  46.             //Subscribe to topics   
  47.                 mqttClient.subscribe(new String[]{TOPIC,clientId});  
  48.                  
  49.                 System.out.println("topic:"+TOPIC+",  "+(clientId));  
  50.                 ComponentUtil.appendResult(resultTextPane, "TOPIC:"+TOPIC+",  "+(clientId), true);  
  51.             }  
  52.   
  53.         } catch (MqttException e) {  
  54.             if(isPrintException){  
  55.             e.printStackTrace();}  
  56.             GUIUtil23.errorDialog(e.getMessage());  
  57.             return false;  
  58.         }  
  59.         return true;  
  60.     }  

 

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

Java代码  收藏代码
  1. /** 
  2.      * 初始化connection和session 
  3.      *  
  4.      * @throws Exception 
  5.      */  
  6.     private void init(/* String mqIp,boolean transacted */throws Exception {  
  7.         if (!DialogUtil.verifyTFEmpty(serverIpTextField, "服务器ip")) {  
  8.             return;  
  9.         }  
  10.         String transactedStr = transactedTextField.getText();  
  11.         boolean transacted = false;  
  12.         if (ValueWidget.isNullOrEmpty(transactedStr)) {  
  13.             transacted = false;  
  14.         } else {  
  15.             transacted = Boolean.parseBoolean(transactedStr);  
  16.         }  
  17.         String message = "transacted:" + transacted;  
  18.         ComponentUtil.appendResult(resultTextArea, message, false);  
  19.         // System.out.println(message);  
  20.         String brokerUrl = String.format(BROKER_URL,  
  21.                 serverIpTextField.getText());  
  22.           
  23.          String username=usernameTextField.getText();  
  24.          String password=passwordTextField.getText();  
  25.          if(ValueWidget.isNullOrEmpty(username)){  
  26.             username=null;  
  27.          }  
  28.          if(ValueWidget.isNullOrEmpty(password)){  
  29.             password=null;  
  30.          }  
  31.            
  32.         // 创建链接工厂  
  33.         TopicConnectionFactory factory = new ActiveMQConnectionFactory(  
  34.                 username,  
  35.                 password, brokerUrl);  
  36.         ComponentUtil.appendResult(resultTextArea, "activeMQ url:" + brokerUrl,  
  37.                 true);  
  38.         // 通过工厂创建一个连接  
  39.         connection = factory.createTopicConnection();  
  40.         // 启动连接  
  41.         connection.start();  
  42.         ComponentUtil.appendResult(resultTextArea, "启动connection 成功"true);  
  43.         // 创建一个session会话 transacted  
  44.         session = connection.createTopicSession(  
  45.                 transacted /* Boolean.FALSE */, Session.AUTO_ACKNOWLEDGE);  
  46.   
  47.     }  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: