2016-08-03 7 views
1

ここPAHO非同期クライアントである:ここで送る多くのメッセージを公開:あまりにも多くの進捗エラーで公開してい

client = new MqttAsyncClient(appProps.getProperty("mqtt.broker"), 
      appProps.getProperty("mqtt.clientId"), new MemoryPersistence()); 
    client.setCallback(this); 
    client.connect(null, new IMqttActionListener() { 
     @Override 
     public void onSuccess(IMqttToken imt) { 
      try { 
       client.subscribe(Constants.internalTopics, Constants.internalTopicQOS); 
      } catch (MqttException ex) { 
       ex.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(IMqttToken imt, Throwable thrwbl) { 
      thrwbl.printStackTrace(); 
     } 
    }); 

私はループ内でメッセージを送信しています:

 while (iterator.hasNext()) { 
      try { 
       client.publish("user/" + userId + "/downstream", mqttMessage); 
      } catch(Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 

エラー:

Too many publishes in progress (32202) 
    at org.eclipse.paho.client.mqttv3.internal.ClientState.send(ClientState.java:436) 
    at org.eclipse.paho.client.mqttv3.internal.ClientComms.internalSend(ClientComms.java:121) 
    at org.eclipse.paho.client.mqttv3.internal.ClientComms.sendNoWait(ClientComms.java:139) 
    at org.eclipse.paho.client.mqttv3.MqttAsyncClient.publish(MqttAsyncClient.java:858) 
    at org.eclipse.paho.client.mqttv3.MqttAsyncClient.publish(MqttAsyncClient.java:836) 
は、

私は使用していますRabbitmq

+0

キューにはいくつのメッセージがあるのか​​など、ここでは本当に便利なコンテキストがありますか?エラーが到着したときにあなたはどのくらいあなたのところにいますか? – hardillb

+0

私は反復している1000のリストを持っていました。私は200-300に達した後にそれがエラーをスローすることを発見した。当時のもう1つのことは、1000件のトピックすべてに加入者がいなかったことです。だから、ただの出版社でない購読者 – manish

答えて

3

Pahoクライアントのsourceを見ると、デフォルトで最大の機内メッセージ数は10になります。

パブリッシュループが厳しいため、ネットワークレイヤーでは少し遅くなりますあなたはいつでも送信される過程で10以上のメッセージで終わることになります。あなたはあなたがclient.connect()メソッドに渡されMQTTConnectionsOptionsオブジェクト上のsetMaxInflight(int n)メソッドでデフォルトを変更することができQOS 0より大きい

で送信しようとした場合にのみ悪くなります。

適切な値を見つけるために実験することをおすすめします。

+0

ウェブアプリケーションでは、これはあなたのウェブユーザから1000のメッセージを受け取っており、配信されなければならないことが一般的なscanerioです。どのようにこれらのsiuationsが処理されますか? – manish

+0

制限に適切な値を設定してください – hardillb

+1

また、同じメッセージを1000の異なるトピックに公開したり、1つのトピックに公開したり、1000人のサブスクライバを公開したりするべきではありません。 – hardillb

関連する問題