2016-03-05 63 views
1

在这里完全丢失,但只要我尝试连接到CloudMQTT,我的客户端崩溃。Android Paho + CloudMQTT EOFException只要我连接

3-05 16:22:54.541 9063-9078/my.pkg.name d/MQTTCONN:关于连接

03-05 16:22:55.341 9063-9091/my.pkg。命名d/AlarmPingSender:注销alarmreceiver到MqttServiceourTestMqttSubId

03-05 16:22:55.375 9063-9063/my.pkg.name E/MQTTFAIL:连接丢失

03-05 16:22:55.376 9063- 9063/my.pkg.name W/System.err:at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:146)

03-05 16:22:55.377 9063-9063/my.pkg.name W/System.err:at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:65 )

03-05 16:22:55.377 9063-9063/my.pkg.name W/System.err:at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:107 )

这里是我的代码:

final MqttAndroidClient mqttClient = new MqttAndroidClient(
    argsService.getContext(), 
    (String) configService.getArg("mqttBroker"), 
    activeSubId.getSubId(), 
    new MemoryPersistence() 
); 

MqttConnectOptions options = new MqttConnectOptions(); 
options.setCleanSession(true); 
options.setUserName((String) configService.getArg("mqttUser")); 
options.setPassword(((String) configService.getArg("mqttPassword")).toCharArray()); 
options.setConnectionTimeout(9999); 

Log.d("MQTTCONN", "About to connect"); 
mqttClient.connect(options, null, new IMqttActionListener() { 
    @Override 
    public void onSuccess(IMqttToken asyncActionToken) { 
     Log.d("MQTTCONN", "Connect ready"); 
     mqttClient.setCallback(new MqttCallback() { 
      @Override 
      public void connectionLost(Throwable cause) { 
       // Someday, in case we want to recover our service 
      } 

      @Override 
      public void messageArrived(String topic, MqttMessage message) throws Exception { 
       receiveMessageIntent.enact(
        new JSONObject(new String(message.getPayload())), 
        pubsub 
       ); 
      } 

      @Override 
      public void deliveryComplete(IMqttDeliveryToken token) { 

      } 
     }); 

     try { 
      mqttClient.subscribe(getSubId().getSubId(), QOS); 
     } catch (MqttException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 
     Log.e("MQTTFAIL", exception.getMessage()); 
     exception.printStackTrace(); 
    } 
}); 

疑难解答我已经尝试过:

  • 设置权在上面的清单打开我application标签适当的Android权限(但我不使用的持久性,所以它只是需要上网)
  • 设置MQTT版本MqttConnectOptions.MQTT_VERSION_3_1
  • 试图ssl://与CloudMQTT的SSQL 2XXXX端口
  • 重启CloudMQTT实例

回答

0

给别人谁可能在将来对这个跌跌 - MQTT是一个相当简单的,轻松自由的协议来设置。像这样的问题很可能在服务器端。

就我而言,很可能是CloudMQTT的Free Tier连接/使用限制导致此问题。花了很多时间试图找出Paho的胆量之后,我简单地用一个方便的Ansible角色和AWS开发了我自己的Mosquitto实例,事情就像几小时前应该有的膨胀一样:-)

0

我不'不要使用CloudMQTT作为经纪人,但是我遇到了与其他经纪人(RabbitMQ)发生此问题的问题。事实证明,在改变持久(qos1 +)队列的TTL后,我必须删除所有现有的队列,并让客户端重新创建它们。大概改变科学计划也会有效。