問題の解決: MQTT クライアントの接続が切断される

正常に接続され、短時間または長時間実行された後で、予期しない ConnectionLost 例外をクライアントがスローする原因となっているものを突き止めます。

始める前に

MQTT クライアントの接続は正常に行われました。クライアントの接続はしばらく続く可能性があります。クライアントが短い間隔でのみ開始している場合、接続が成功してから接続が切断するまでの時間は短い可能性があります。

切断された接続と、正常に行われた後に切断された接続を見分けるのは難しくありません。切断された接続は、MqttCallback.ConnectionLost メソッドを呼び出す MQTT クライアントによって定義されます。 このメソッドは、接続が正常に確立されてからでなければ呼び出されません。症状は、否定応答を受信するかタイムアウトになった後で例外をスローする MqttClient.Connect とは異なります。

WebSphere® MQ に付属する MQTT クライアント・ライブラリーを MQTT クライアント・アプリケーションが使用していない場合、症状はクライアントによって異なります。 MQTT v3 プロトコルでは、サーバーへの要求に対する応答がタイムリーに行われない、あるいは TCP/IP 接続が失敗する、という症状が現れます。

このタスクについて

MQTT クライアントは、接続の肯定応答を受信した後に発生したサーバー・サイドの問題に対して、スロー可能な例外とともに MqttCallback.ConnectionLost を呼び出します。 MQTT クライアントが MqttTopic.publish および MqttClient.subscribe から戻ると、メッセージを送受信する役割を持つ MQTT クライアント・スレッドに要求を転送します。 サーバー・サイドのエラーは、スロー可能な例外を ConnectionLost コールバック・メソッドに渡すことによって非同期で報告されます。

テレメトリー (MQXR) サービスは、接続を切断する場合には常に、First Failure Data Capture ファイルを作成します。

手順

  1. 同じ ClientIdentifier を使用する別のクライアントが開始しましたか?

    同じ ClientIdentifier を使用して、2 番目のクライアントが開始した場合、または同じクライアントが再始動した場合、最初のクライアントとの最初の接続が切断されます。

  2. クライアントはパブリッシュまたはサブスクライブを行う許可が与えられていないトピックにアクセスしましたか?

    テレメトリー・サービスがクライアントに代わってアクションを行い、そのアクションが MQCC_FAIL を戻した場合、サービスはクライアント接続を切断します。

    理由コードはクライアントに返されません。
    • mqxr.log および AMQERR01.LOG ファイルでログ・メッセージを探し、クライアントが接続されているキュー・マネージャーがないか調べてください (サーバー・サイドのログを参照)。
  3. TCP/IP 接続は切断されましたか?

    TCPIP 接続を非アクティブとしてマーキングするためのファイアウォールのタイムアウト設定が低かったために接続が切断された可能性があります。

    • MqttConnectOptions.setKeepAliveInterval を使って、非アクティブの TCPIP 接続時間を短くしてください。

タスク タスク

フィードバック

タイム・スタンプ・アイコン 最終更新: 2018 年 10 月 2 日 (火)
http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.tro.doc/com.ibm.mq.tro.doc/q039410_.htm tt80300_