サービスの品質および接続の管理

MQTT では、サービスの品質 (QoS) によって、基礎となるトランスポート上でのメッセージの送達保証が制御されます。 IBM® Integration Bus は、QoS レベルが 0、1、または 2 のいずれであるかに応じて、さまざまな方法でメッセージを処理します。

QoS の 3 つのレベルは、 MQTT プロトコル仕様に定義されています。 以下のリストは、3 つのレベルの要約を示しています。
QoS 0
最高 1 回の配信 (応答不要送信)
QoS 1
最低 1 回の配信 (応答確認送信)
QoS 2
正確に 1 回の配信 (送信保証)
MQTT プロトコル仕様を実装するオープン・ソースの Eclipse Paho MQTT クライアントは、 IBM Integration Busに組み込まれています。 MQTT ノードは Paho クライアントを使用して、異なる QoS レベルが関連付けられた MQTT プロトコル・メッセージの交換を処理します。

IBM Integration Bus が MQTT サーバーに接続して、QoS 1 または QoS 2 のメッセージをパブリッシュすると、クリーン・セッション・フラグは 0 (false) に設定されます。 したがって、接続が失われたときに処理中であったパブリケーションは、 IBM Integration Bus がサーバーに再接続したときに配信されます。 サブスクリプションの場合、クリーン・セッション・フラグは 1 (true) に設定されます。 MQTTSubscribe ノードが MQTT サーバーに接続または再接続すると、接続は新規接続として扱われます。

MQTTSubscribe ノードの動作

受信メッセージの QoS レベルは、MQTT サーバーから IBM Integration Busへのメッセージの転送にのみ適用されます。 QoS 0 のメッセージが Paho クライアントによって正常に受信されると、 MQTTSubscribe ノードはメッセージを Out ターミナルに伝搬します。 QoS 1 または QoS 2 のメッセージを正常に受信した場合は、Paho クライアントは、そのメッセージがノードによって処理されるようにするため、メッセージの受信について肯定応答する必要があります。 転送が正常に確認されて完了した後は、QoS レベルは IBM Integration Busによるメッセージの処理方法にはこれ以上影響しません。

MQTT サーバーへのネットワーク接続が失われた場合、 MQTTSubscribe ノードは 5 秒後に接続を再試行します。 再接続の試行間隔は、試行のたびに 5 秒ずつ延び、最大 2 分間隔となります。 再接続の試行回数には制限がありません。 これらの試行は、MQTT アクティビティー・ログに記録されます。

メッセージが IBM Integration Busによって処理できる速度より速く到着した場合、メッセージ受信は、メッセージ・フローがメッセージを処理できるようになるまでブロックされます。

MQTTSubscribe ノードがメッセージを受信すると、 サービスの品質 変数を使用して、ローカル環境にメッセージの QoS が取り込まれます。 ローカル環境変数について詳しくは、 MQTTSubscribe ノードを参照してください。

MQTTPublish ノードの動作

パブリッシュされたメッセージの QoS レベルは、 IBM Integration Bus から MQTT サーバーへのメッセージの転送に適用されます。 MQTTPublish ノードが QoS 0 のメッセージをパブリッシュする場合、転送の確認応答は予期されません。 MQTTPublish ノードが QoS 1 または QoS 2 のメッセージをパブリッシュすると、ノードは、MQTT サーバーがメッセージの受信を確認したことを Paho クライアントが確認するまで最大 30 秒間待機します。 この時間を過ぎても肯定応答が受信されない場合、ノードはパブリッシュを再試行します。 この 2 回目の試行が失敗すると、メッセージ BIP12099 とともに例外が生成され、ノードはこのメッセージを Failure ターミナルに伝搬します (ノードに Failure ターミナルが接続されている場合)。 Failure ターミナルが接続されていない場合、メッセージは入力ノードにロールバックされます。

トランスポートの問題の診断

ネットワーク・レベルで接続障害があると、メッセージ BIP12096 とともに例外が生成されます。 MQTT リソース統計の測定値 FailedConnections (統合サーバーの最後の再始動以降に失敗した、MQTT サーバーへの接続試行の総数を報告する) も増加します。

MQTT アクティビティー・ログでは、以下の接続の問題がログに記録されます。
  • MQTT サーバーへの接続に失敗した
  • MQTT サーバーへの接続を再試行した
  • MQTT サーバーへの接続を失った
  • MQTT サーバーへの接続解除に失敗した
アクティビティー・ログ は、メッセージをトピックにパブリッシュしようとして成功した試行と失敗した試行の両方を、メッセージの QoS とともに記録します。 MQTTSubscribe ノードが正常にトピックをサブスクライブするか、トピックからメッセージを受信すると、サブスクリプションまたはメッセージの QoS とともに、この成功もログに記録されます。