このトピックでは、メッセージサービス (MNS) サーバー側サブスクリプションを作成して、製品の下にあるデバイスのステータス変更に関するメッセージをMNSキューにプッシュする方法について説明します。 サーバーは、MNSキューをリッスンすることでメッセージを受信できます。
前提条件
次のAlibaba Cloudサービスが有効化されています。
開発環境はすぐに使用できます。 この例では、以下のJava開発環境を使用しています。
オペレーティングシステム: Windows 10 (64ビット)
Java開発キット (JDK): JDK 8
統合開発環境 (IDE): IntelliJ IDEAコミュニティエディション
背景情報
次の図は、データの流れを示しています。

サーバー側サブスクリプションの設定
IoT Platformコンソールで、MNSサーバー側サブスクリプションを作成し、サブスクライブするメッセージのタイプを選択します。
IoT Platformコンソールにログインします。
[概要] ページで、[すべての環境] をクリックします。 [すべての環境] タブで、管理するインスタンスを見つけ、インスタンスIDまたはインスタンス名をクリックします。
左側のナビゲーションウィンドウで、 を選択します。 [プロダクト] ページで、[プロダクトの作成] をクリックしてプロダクトを作成します。 この例では、ガス検出器製品が作成される。
を選択して、ガス検出器製品の下にデバイスを作成します。
Link SDKを使用してデバイスを開発する前に、デバイス証明書を取得する必要があります。
左側のナビゲーションウィンドウで、 を選択します。 サーバー側サブスクリプションページで、[サブスクリプションの作成] をクリックして、MNSサーバー側サブスクリプションを作成します。 詳細については、「MNSサーバー側サブスクリプションの設定」をご参照ください。
説明[サブスクリプションタイプ] ドロップダウンリストから初めてMNSを選択すると、IoT PlatformにMNSへのアクセスを許可するように求めるメッセージが表示されます。 [今すぐ許可] をクリックして、Resource Access Management (RAM) コンソールに移動します。 [承認ポリシーの確認] をクリックします。
Message Typeパラメーターをデバイスステータス変更通知に設定します。 製品のデバイスのステータス変更に関するすべてのメッセージは、MNSキューにプッシュされます。
サブスクリプションを作成すると、IoT Platformは自動的にMNSにキューを作成します。 キューは、IoT Platformからメッセージを受信するために使用されます。 キュー名の形式は
aliyun-iot-${yourProductKey}です。 MNS SDKを使用してキューのメッセージをリッスンする場合は、キューの名前を指定する必要があります。[サブスクリプション] タブで、MNSの横にあるアイコンの上にポインターを移動して、MNSキューの名前を表示します。

MNS SDKを使用したメッセージの受信
この例では、Java用のMNS SDKが使用されます。
MNS SDK for Javaのサンプルパッケージをダウンロードし、パッケージを解凍します。 サンプルパッケージをダウンロードするには、「SDK for Javaのリリースノート」をご参照ください。
この例では、aliyun-sdk-mns-samples-1.1.9.1.zipパッケージが使用されています。
IntelliJ IDEAで、aliyun-sdk-mns-samples-1.1.9.1ディレクトリを選択してプロジェクトをインポートします。
C:\Users \${ YourComputerUserName} のローカルディレクトリで、を作成します。aliyun-mns.propertiesファイル。 ID情報を次の形式でファイルに追加します。 識別情報は、認証のためにMNSによって使用される。
説明Linuxの場合、ホームディレクトリは /home/YOURNAME/ です。 Windowsの場合、ホームディレクトリはC:\Users\YOURNAMEです。
mns.accountendpoint=http://${your_accountId}.mns.${your_regionId}.aliyuncs.com mns.accesskeyid =${ your_accesskeyid} mns.accesskeysecret =${ your_accesskeysecret}パラメーター
説明
accountendpoint
MNSのエンドポイント。 MNSコンソールで、MNSキューが存在するリージョンを選択し、キューの [詳細] をクリックしてエンドポイントを表示します。
accesskeyid
Alibaba CloudアカウントのAccessKey IDとAccessKeyシークレットをします。
IoT Platformコンソールにログインし、プロファイル画像の上にポインターを移動し、[AccessKey管理] をクリックしてAccessKey IDとAccessKeyシークレットを取得します。
accesskeysecret
src\main\java\com.aliyun.mns.sample.QueueディレクトリのComsumerDemoファイルに次のコードを追加します。 このコードは、IoT Platformによって自動的に作成されるキューの名前を指定するために使用されます。
public static void main(String[] args) { CloudAccountアカウント=新しいCloudAccount () ServiceSettings.getMNSAccessKeyId(), ServiceSettings.getMNSAccessKeySecret() 、 ServiceSettings.getMNSAccountEndpoint(); MNSClient client = account.getMNSClient(); // クライアントを初期化します。 // メッセージを抽出します。 try{ CloudQueue queue = client.getQueueRef("aliyun-iot-a1eN7La ****");// IoT Platformによって自動的に作成されるキューの名前を指定します。 for (int i = 0; i < 10; i++) { Message popMsg = queue.popMessage(); // 長いポーリングのタイムアウト期間を指定します。 if (popMsg != null){ System.out.println("message handle: " + popMsg.getReceiptHandle()); System.out.println("message body: " + popMsg.getMessageBodyAsString()); // 生のメッセージを取得します。 System.out.println("message id: " + popMsg.getMessageId()); System.out.println("message dequeue count:" + popMsg.getDequeueCount()); //<<特別なロジックを追加します。>> // キューからメッセージを削除します。 queue.de leteMessage(popMsg.getReceiptHandle()); System.out.println("delete message successfully.\n"); } } }ComsumerDemo.javaファイルを実行します。
デバイスSDKの設定
[Link SDK] ページで、[SDK for Java] セクションを選択します。
Link SDK for Javaのデモパッケージをダウンロードし、パッケージを解凍します。
説明デモをダウンロードすることにより、ソフトウェアライセンス契約に同意したことになります。
IntelliJ IDEAで、JavaLinkKitDemoディレクトリをプロジェクトとしてインポートします。
device_idファイルで、デバイス証明書の情報を指定します。

src\main\java\com.aliyun.alink.devicesdk.de moディレクトリのMqttSampleファイルで、発行セクションでデバイスデータが送信されるトピックの名前を指定します。

src\main\java\com.aliyun.alink.devicesdk.de moディレクトリのHelloWorldファイルで、デバイスを接続するIoT Platformインスタンスのエンドポイントを指定します。
エンドポイントの取得方法については、「インスタンスのエンドポイントの管理」をご参照ください。

HelloWorld.javaファイルを実行して、デバイスをIoT Platformに接続します。
結果の検証
コードを実行すると、メッセージがMNSキューに送信されます。 メッセージは、デバイスがオンラインであることを示します。 MNS SDK for Javaを使用してメッセージを受信し、MNSキューからメッセージを削除できます。
メッセージを受信して削除する方法を次の図に示します。
