3.3. ネットワーク接続での MQTT の使用
ブローカーは MQTT v3.1.1 と v5.0 (および古い v3.1 コードメッセージ形式) をサポートします。MQTT は軽量のクライアントからサーバーへ、パブリッシュ/サブスクライブメッセージングプロトコルです。MQTT は、メッセージングのオーバーヘッドおよびネットワークトラフィック、およびクライアントのコードフットプリントを削減します。このような理由から、MQTT は、センサーやアクチュエーターなどのデバイスを制限するのが適しており、この ng(IoT) のインターネット向けの de facto 標準通信プロトコルがすばやく考えられます。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 - MQTT プロトコルが有効になっているアクセプターを追加します。以下に例を示します。
<acceptors> <acceptor name="mqtt">tcp://localhost:1883?protocols=MQTT</acceptor> ... </acceptors>
MQTT には、以下を含む便利な機能が多数含まれています。
- Quality of Service
- 各メッセージは、関連付けられた Quality of Service を定義できます。ブローカーは、定義された最大 Quality of Service レベルで、サブスクライバーに対してメッセージの配信を試みます。
- 保持されるメッセージ
特定のアドレスに対してメッセージを保持できます。クライアントの接続前に保持されるメッセージが送信された場合でも、他のメッセージの前に最後に保持されたメッセージを受信する新しいサブスクライバー。
保持されたメッセージは、
sys.mqtt.<topic name>
という名前のキューに保存され、クライアントが保持されたメッセージを削除するまで、または有効期限が設定されている場合はメッセージの有効期限が切れるまで、キュー内に残ります。キューが空の場合、キューは明示的に削除するまで削除されません。たとえば、次の設定ではキューが削除されます。<address-setting match="$sys.mqtt.retain.#"> <auto-delete-queues>true</auto-delete-queues> <auto-delete-addresses>true</auto-delete-addresses> </address-setting>
- ワイルドカードサブスクリプション
- MQTT アドレスは、ファイルシステムの階層と同様に階層です。クライアントは、特定のトピックや、階層のブランチ全体にサブスクライブできます。
- メッセージ
- クライアントは、接続パケットの一部として "will message" を設定できます。クライアントが異常に切断されると、ブローカーは指定されたアドレスにメッセージを公開します。他のサブスクライバーはメッセージを受信し、対応できます。
MQTT プロトコルの詳細は、仕様を参照してください。
3.3.1. MQTT プロパティーの設定
キーと値のペアを MQTT アクセプターに追加して、接続プロパティーを設定できます。以下に例を示します。
<acceptors> <acceptor name="mqtt">tcp://localhost:1883?protocols=MQTT;receiveMaximum=50000;topicAliasMaximum=50000;maximumPacketSize;134217728; serverKeepAlive=30;closeMqttConnectionOnPublishAuthorizationFailure=false</acceptor> ... </acceptors>
- receiveMaximum
-
完了通知が必要になる前にブローカーがクライアントから受信できる QoS 1 および 2 メッセージの最大数を指定することにより、フロー制御を有効にします。デフォルト値は
65535
です。-1
の値は、クライアントからブローカーへのフロー制御を無効にします。これには、値を 0 に設定するのと同じ効果がありますが、CONNACK パケットのサイズが小さくなります。 - topicAliasMaximum
-
クライアントに対して、ブローカーがサポートするエイリアスの最大数を指定します。デフォルト値は
65535
です。-1 の値を指定すると、ブローカーはトピックエイリアスの制限をクライアントに通知できなくなります。これは、値を 0 に設定するのと同じ効果がありますが、CONNACK パケットのサイズが小さくなります。 - maximumPacketSize
-
ブローカーがクライアントから受け入れることができる最大パケットサイズを指定します。デフォルト値は
268435455
です。値が -1 の場合、ブローカーはクライアントに最大パケットサイズを通知できなくなります。つまり、受信パケットのサイズに制限が適用されません。 - serverKeepAlive
-
ブローカーが非アクティブなクライアント接続を開いたままにしておく期間を指定します。設定された値は、クライアントに設定されたキープアライブ値よりも小さい場合、またはクライアントに設定された値が 0 である場合にのみ、接続に適用されます。デフォルト値は
60
秒です。-1
の値は、ブローカーがクライアントのキープアライブ値を (その値が 0 であっても) 常に受け入れることを意味します。 - closeMqttConnectionOnPublishAuthorizationFailure
-
デフォルトでは、承認がないために PUBLISH パケットが失敗した場合、ブローカーはネットワーク接続を閉じます。ブローカーがネットワーク接続を閉じる代わりに完了通知を送信するようにする場合は、
closeMqttConnectionOnPublishAuthorizationFailure
をfalse
に設定します。