IoT Platformを使用すると、デバイスメッセージをMessage Service (MNS) に送信できます。 クラウドアプリケーションは、MNSキューをリッスンすることでデバイスメッセージを取得できます。 このトピックでは、MNSサーバー側サブスクリプションを設定する方法について説明します。
前提条件
RAMユーザーを使用する場合、そのRAMユーザーにはAliyunIOTAccessingMNSRole
権限が必要です。
手順
IoT Platformコンソールで、製品のMNSサーバー側サブスクリプションを設定します。 これにより、IoT Platformは自動的にメッセージをMNSに転送します。
IoT Platformコンソールにログインします。
[概要] ページで、[すべての環境] をクリックします。 [すべての環境] タブで、管理するインスタンスを見つけ、インスタンスIDまたはインスタンス名をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
サーバー側サブスクリプションページの [サブスクリプション] タブで、[サブスクリプションの作成] をクリックします。
[サブスクリプションの作成] ダイアログボックスでパラメーターを設定し、[OK] をクリックします。 下表に、各パラメーターを説明します。
パラメーター
説明
プロダクト
デバイスが属する製品を選択します。 デバイスによって送信されたメッセージは、コンシューマにプッシュされます。
サブスクリプションタイプ
[MNS] を選択します。
メッセージタイプ
メッセージの種類を選択します。 次のタイプのデバイスメッセージをサブスクライブできます。
重要ゲートウェイ製品およびデバイス808メッセージキューテレメトリトランスポートMQTTまたはJT/Tを使用している場合、IoT Platformは、デバイスアップストリーム通知、デバイスステータス変更通知、およびライフサイクル全体のデバイス変更メッセージのみを製品およびデバイスにプッシュします。
デバイスアップストリーム通知: Allowed OperationsパラメーターがPublishに設定されているトピック内のメッセージ。
メッセージには、カスタムデータと、デバイスによって送信されるThing Specification Language (TSL) データが含まれます。 上流TSLデータは、プロパティデータ、イベントデータ、プロパティ設定要求に対する応答、およびサービスコールに対する応答を含む。 ユーザーサーバーにプッシュされるTSLデータは、IoT Platformによって処理されます。 詳細については、「データ形式」をご参照ください。
たとえば、製品には次のトピックカテゴリが定義されています。
/${productKey}/${deviceName}/user/get
です。 このトピックカテゴリのAllowed OperationsパラメーターはSubscribeに設定されています。/${productKey}/${deviceName}/user/update
です。 このトピックカテゴリのAllowed Operationsパラメーターは、Publishに設定されています。/${productKey}/${deviceName}/thing/event/property/post
このトピックカテゴリの許可された操作パラメーターは公開に設定されています。
サーバー側サブスクリプション機能は、
/${productKey}/${deviceName}/user/update
および/${productKey}/${deviceName}/thing/event/property/post
のトピックカテゴリのメッセージをプッシュします。デバイスステータス変更通知: デバイスがオンラインまたはオフラインになったときにデバイスから送信される通知。
ゲートウェイのサブデバイス検出レポート: ゲートウェイが新しいサブデバイスを検出したときにゲートウェイによって送信されるサブデバイスデータ。 ゲートウェイには、サブデバイスの検出に使用できるアプリケーションが必要です。 このメッセージタイプはゲートウェイに固有です。
デバイストポロジ関係の変更: サブデバイスとゲートウェイ間のトポロジ関係が作成または削除されたときにゲートウェイによって送信される通知。 このメッセージタイプはゲートウェイに固有です。
ライフサイクル全体にわたるデバイスの変更: デバイスが作成、削除、有効化、または無効化されたときにデバイスによって送信される通知。
TSL履歴データレポート: デバイスによって送信されたプロパティとイベントの履歴。
OTA更新ステータス通知: 更新パッケージの検証およびバッチ更新中にデバイスが送信する通知。 デバイスの更新が成功したか失敗したかに関係なく、通知がプッシュされます。
表示されるダイアログボックスで、[OK] をクリックします。
IoT Platformは、aliyun-iot-${productKey} 形式のMNSメッセージキューを自動的に作成します。 キューリスナーを設定する場合は、メッセージキューを指定する必要があります。
MNSリソースに対して課金されます。 MNSの課金方法の詳細については、「MNS課金」をご参照ください。
説明MNSサーバー側サブスクリプションを削除すると、関連するMNSキューが自動的に削除されます。
MNSクライアントを設定し、MNSキューをリッスンしてデバイスメッセージを受信します。
この例では、MNSキューをリッスンするためにMNS SDK for Javaを使用します。
SDKのダウンロード方法については、MNSドキュメントをご参照ください。
MNS SDK for Javaをインストールするには、次の依存関係をpom.xmlファイルに追加します。
<dependency> <groupId>com.aliyun.mns</groupId> <artifactId>aliyun-sdk-mns</artifactId> <version>1.1.8</version> <classifier>jar-with-dependencies</classifier> </dependency>
SDKを設定するときに、次のパラメーターを設定します。
CloudAccountアカウント=new CloudAccount( $AccessKeyId、$AccessKeySecret、$AccountEndpoint);
$AccessKeyIdおよび $AccessKeySecretを、Alibaba CloudアカウントのAccessKey IDおよびAccessKey secretに置き換えます。 パラメーターは、API操作を呼び出すときに必要です。 AccessKeyペアを作成または表示するには、IoT Platformコンソールにログインし、プロファイル写真の上にポインターを移動してから、AccessKey管理をクリックします。
$AccountEndpointをMNSエンドポイントに置き換えます。 MNSコンソールで、[エンドポイントの取得] をクリックします。
デバイスメッセージの受信に使用するロジックを指定します。
MNSClient client = account.getMNSClient(); CloudQueue queue = client.getQueueRef("aliyun-iot-a1wmrZPO8o9"); // 自動的に作成されるキューの名前を指定します。 一方、(TRUE){ // メッセージを取得します。 Message popMsg = queue.popMessage(10); // 長いポーリング要求のタイムアウト期間は10秒です。 if (popMsg != null) { System.out.println("PopMessage Body: " + popMsg.getMessageBodyAsRawString()); // 生のメッセージを取得します。 queue.de leteMessage(popMsg.getReceiptHandle()); // キューからメッセージを削除します。 } else { System.out.println("継続"); } }
プログラムを実行してMNSキューをリッスンします。
デバイスを起動し、デバイスからIoT Platformにメッセージを送信します。
Link SDKの設定方法については、Link SDKのドキュメントをご参照ください。
クラウドアプリケーションがメッセージを受信できるかどうかを確認します。 メッセージが受信された場合、メッセージの内容は次の情報に似ています。
{ "messageid":"" 、"messagetype":"upload" 、"topic":"/al12345 ****/device123/user/update" 、"payload":"" 、"timestamp": "" }
パラメーター
説明
messageid
メッセージの ID 。 メッセージIDはIoT Platformによって生成されます。
messagetype
トピックのメッセージタイプ。 有効な値:
アップロード: 送信されたデバイスデータ
status: デバイスのステータス変更
topo_listfound: ゲートウェイによるサブデバイスの検出
topo_lifecycle: デバイストポロジーの変更
device_lifecycle: デバイスのライフサイクルの変更
thing_history: 履歴TSLデータ
ota_event: 無線 (OTA) 更新ステータス
topic
メッセージの転送元のIoT Platformトピック。
payload
base64-encodedメッセージのペイロード。
データ形式の詳細については、「データ形式」をご参照ください。
timestamp
タイムスタンプ。 1970年1月1日木曜日00:00:00から経過した秒数です。