このトピックでは、IoT Platformとデバイスまたはサーバー間のメッセージングに関するよくある質問 (FAQ) に対する回答を提供します。
デバイスが同じコンテンツを持つ複数のメッセージを受信した場合、デバイスはどのようにメッセージを重複排除しますか?
サービス品質 (QoS) レベル1がメッセージングに使用される場合、メッセージは少なくとも1回受信される。 この場合、デバイスは、同じIDを有する重複メッセージを受信することができる。 デバイスは、メッセージIDに基づいてメッセージを重複排除できます。 Alibaba Cloudは、IoT Platformを継続的に更新して、デバイスに送信される重複するQoS 1メッセージの数を減らします。
デバイスがMQTT (Message Queuing Telemetry Transport) を介してIoT Platformに接続された後、デバイスがメッセージを受信できない場合はどうすればよいですか。
デバイスがメッセージを受信できない場合は、次の操作を実行して問題をトラブルシューティングできます。
デバイスがメッセージを受信しない場合は、デバイスが必要なトピックをサブスクライブしているかどうかを確認します。
デバイスが複数のメッセージを受信しない場合は、デバイス側プログラムのコールバックに時間のかかるロジックが存在するかどうかを確認します。 コールバックに時間のかかるロジックが存在する場合は、コールバックの代わりに別のスレッドで時間のかかるロジックを実装することをお勧めします。
デバイスがAndroidまたはJava用のSDKを使用している場合、プログラムが初期化を実行する前に、トピックをサブスクライブするようにデバイス側のプログラムを構成する必要があります。 デバイスがSDKを使用してトピックをサブスクライブする前に初期化が完了した場合、デバイスはIoT Platformからメッセージを受信できません。
デバイスがQoS 1メッセージを受信しない場合は、MQTT接続情報のcleanSessionパラメーターがfalseに設定されているかどうかを確認します。 デバイスがオフライン状態のときにQoS 1メッセージを受信するには、cleanSessionパラメーターをfalseに設定する必要があります。
IoT Platformは受信したメッセージを保存しますか?
IoT Platformは、QoSレベルに基づいて受信したメッセージを保存します。 メッセージがトピックに送信された後、IoT Platformはメッセージをトピックにサブスクライブしているデバイスに転送します。
IoT PlatformはQoS 0メッセージを保存しません。
IoT Platformは、QoS 1メッセージを7日間保存します。
IoT Platformからのメッセージ配信がタイムアウトするのはなぜですか。
メッセージの待ち時間とタイムアウトの問題は、不安定なネットワーク接続によって引き起こされる可能性があります。
次の操作を実行して、デバイス接続のネットワーク安定性をテストできます。
IoT Platform コンソールにログインします。
[概要] ページで、管理するインスタンスを見つけ、インスタンスのIDまたはエイリアスをクリックして、[インスタンスの詳細] ページに移動します。
左側のナビゲーションウィンドウで、[デバイス]> [デバイス] を選択します。
[デバイス] ページのデバイスリストの上に、デバイスの [デバイス名] または [エイリアス] を入力して、デバイスを検索します。
デバイスの [操作] 列で [表示] をクリックして、デバイス情報を表示します。
[デバイス情報] タブで、[リアルタイム遅延] の横にある [テスト] をクリックします。
表示されるダイアログボックスで、[OK] をクリックしてネットワーク遅延をテストします。
手順6と手順7を繰り返して、複数のテストを実行できます。 レイテンシが高い場合、ネットワーク接続は不安定です。
IoT Platformはメッセージと保持されたメッセージをサポートしますか?
はい、IoT Platformは意志メッセージと保持メッセージをサポートします。 IoT Platformでは、MQTT 5.0を使用して、意志メッセージと保持メッセージを指定できます。 詳細については、「IoT PlatformでサポートされているMQTT 5.0機能」をご参照ください。
サーバーはデバイスからメッセージを取得する方法?
サーバーは、次のいずれかの方法を使用してデバイスからメッセージを取得できます。
サーバー側サブスクリプション: IoT Platformのサーバー側サブスクリプション機能を使用して、1つ以上のタイプのメッセージをサブスクライブできます。 IoT Platformは、サブスクリプション設定に基づいて、製品内のすべてのデバイスから特定のタイプのメッセージをサーバーに転送します。 サーバー側サブスクリプションを設定するには、次のいずれかの方法を使用します。
Advanced Message Queuing Protocol (AMQP) SDKを使用して、IoT Platformによって転送されるデバイスデータを受信します。 詳細については、「AMQPサーバー側サブスクリプション」をご参照ください。
Message Service (MNS) SDKを使用して、IoT PlatformによってMNSキューに転送されたデバイスデータを受信します。 詳細については、「MNSサーバー側サブスクリプション」をご参照ください。
データ転送: データ転送機能を使用して、データ転送ルールに基づいて特定のデバイスデータをMNSトピックまたはMessage Queue for Apache RocketMQキューに転送できます。 サーバーは、MNS SDKまたはApache RocketMQ SDK用のMessage Queueを使用してデバイスメッセージを受信します。 詳細については、「データ転送の概要」をご参照ください。
MNSサーバー側サブスクリプションを設定した後、MNSキューがIoT Platformコンソールで送信したメッセージを受信できないのはなぜですか。
メッセージがサーバー側メッセージであるため、MNSサーバー側サブスクリプションを設定した後、MNSキューはIoT Platformコンソールで送信したメッセージを受信できません。 IoT Platformコンソールで、またはIoT Platform API操作を呼び出して送信するすべてのメッセージは、サーバー側のメッセージと見なされ、MNSキューには転送されません。 デバイスによって送信されたメッセージのみがMNSキューに転送されます。 メッセージは、アップストリームデバイスメッセージと、デバイスステータス変更およびデバイスタグ変更の通知とを含む。
MNSサーバーがメッセージを受信するトピックを特定するにはどうすればよいですか?
メッセージの内容を表示します。 サンプルメッセージ:
{
"messageid": "12345" 、"messagetype": "status/upload" 、"topic": "null/topic" 、"payload": {}、"timestamp": 1469564576
} topicフィールドの値に基づいて、MNSサーバーがメッセージを受信するトピックを特定できます。
IoT Platformからデバイスにメッセージを送信する方法を教えてください。
IoT Platform API操作を呼び出して、IoT Platformからデバイスにメッセージを送信できます。 次の表に、サポートされているAPI操作を示します。
API | 説明 |
カスタムトピックを使用してデバイスにメッセージを送信します。 | |
カスタムトピックを使用して、製品の複数のデバイスに同時にメッセージを送信します。 | |
製品のオンラインデバイスにメッセージをブロードキャストします。 すべてのオンラインデバイス、または特定のトピックをサブスクライブするオンラインデバイスのみを指定できます。 | |
デバイスにリクエストを送信し、デバイスからのレスポンスを同期して受信します。 | |
デバイスのThing Specification Language (TSL) プロパティを設定します。 | |
プロダクトの複数のデバイスのTSLプロパティを設定します。 | |
デバイス上のTSLサービスを呼び出します。 | |
プロダクトの複数のデバイスでTSLサービスを呼び出します。 |