使用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);
- }
