すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:サーバー側サブスクリプション (MNS)

最終更新日:Jun 22, 2026

このトピックでは、サーバー側サブスクリプションを設定して、プロダクトのデバイスステータス変更通知を Simple Message Queue (formerly MNS) (SMQ) キューにプッシュする方法について説明します。その後、ご利用のサーバーは MNS キューをリッスンすることで、これらの通知を受信できます。

前提条件

  • 次の Alibaba Cloud サービスが有効化されていることを確認してください:

  • 開発環境を準備します。この例では、次の Java 開発環境を使用します:

サーバー側サブスクリプションの設定

IoT Platform コンソールで、MNS のサーバー側サブスクリプションを作成し、サブスクライブするメッセージタイプを選択します。

  1. IoT Platform コンソールにログインします。

  2. [概要] ページで、管理するインスタンスを見つけ、インスタンス ID またはインスタンス名をクリックします。

  3. 左側のナビゲーションウィンドウで、[デバイス] > [プロダクト] を選択します。次に、[プロダクトの作成] をクリックして、ガス検知器プロダクトを作成します。

  4. [デバイス] > [デバイスの追加] を選択して、ガス検知器プロダクト配下にデバイスを作成します。

    デバイス証明書は、デバイス側 SDK を設定する際に必要です。

  5. 左側のナビゲーションウィンドウで、[ルールエンジン] > [サーバー側サブスクリプション] を選択します。次に、[サブスクリプションの作成] をクリックして、MNS のサーバー側サブスクリプションを作成します。詳細については、「MNS のサーバー側サブスクリプションの使用」をご参照ください。

    説明

    初めて MNS へのメッセージ転送を設定する場合、プロンプトで [承認] をクリックする必要があります。その後、RAM コンソールにリダイレクトされ、IoT Platform に MNS へのアクセス権を付与します。

    この例では、メッセージタイプとして [デバイスステータス変更通知] を選択します。これにより、プロダクトのすべてのデバイスステータス変更通知が MNS キューにプッシュされるようになります。

    サブスクリプションが作成されると、IoT Platform はメッセージを受信するためのキューを MNS に自動的に作成します。キュー名は aliyun-iot-${yourProductKey} のフォーマットです。MNS SDK を設定してメッセージをリッスンする際には、このキュー名を使用する必要があります。

    サブスクリプションリストで、MNS の横にあるアイコンをクリックして MNS キュー名を表示します。

サーバー側 MNS SDK の設定

この例では、MNS SDK for Java のデモを使用します。

  1. MNS SDK for Java リリースノート」に移動し、サンプルパッケージをダウンロードして解凍します。

    この例では、aliyun-sdk-mns-samples-1.1.9.1.zip サンプルパッケージを使用します。

  2. IntelliJ IDEA で、aliyun-sdk-mns-samples-1.1.9.1 フォルダをプロジェクトとしてインポートします。

  3. ローカルディレクトリ C:\Users\${YourComputerUserName} に、.aliyun-mns.properties という名前のプロパティファイルを作成します。このファイルに、ご利用の 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 サービスのエンドポイントです。これは Message Service (MNS) コンソールで確認できます。キューがあるリージョンを選択し、キューの [詳細] をクリックします。

    accesskeyid

    ご利用の Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret です。

    IoT Platform コンソールにログインし、プロフィール画像にポインターを合わせ、[AccessKey の管理] をクリックして AccessKey ID と AccessKey Secret を取得します。

    accesskeysecret

  4. \src\main\java\com.aliyun.mns.sample.Queue ディレクトリにある ComsumerDemo.java ファイルで、IoT Platform によって自動的に作成された Simple Message Queue (formerly MNS) キューの名前を指定します。

        public static void main(String[] args) {
            CloudAccount account = new 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.deleteMessage(popMsg.getReceiptHandle());
                        System.out.println("delete message successfully.\n");
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
  5. ComsumerDemo.java ファイルを実行します。

デバイス側 SDK の設定

  1. Link SDK」に移動し、SDK for Java を選択します。

  2. Link SDK for Java デモをダウンロードしてパッケージを解凍します。

    説明

    このデモをダウンロードすることにより、ソフトウェアライセンス契約に同意したことになります。

  3. IntelliJ IDEA で、JavaLinkKitDemo プロジェクトをインポートします。

  4. device_id ファイルに、ご利用のデバイス証明書情報を入力します。

    {
      "productKey": "xxx",
      "deviceName": "Esensor",
      "productSecret": "",
      "deviceSecret": "1xxx?2"
    }
  5. \src\main\java\com.aliyun.alink.devicesdk.demo ディレクトリにある MqttSample.java ファイルで、パブリッシュ Topic をご利用のデバイス Topic に設定します。

    public class MqttSample extends BaseSample {
        final static String TAG = "MqttSample";
        public MqttSample(String pk, String dn) { super(pk, dn); }
        /**
         * パブリッシュ API の例です。
         */
        public void publish() {
            MqttPublishRequest request = new MqttPublishRequest();
            // ユースケースに基づいて Topic を指定します。
            request.topic = "/sys/" + productKey + "/" + deviceName + "/thing/deviceinfo/update";
        }
    }
  6. \src\main\java\com.aliyun.alink.devicesdk.demo ディレクトリにある HelloWorld.java ファイルに、デバイス接続情報を入力します。

    デバイス接続情報を取得するには、「インスタンスエンドポイントの表示と設定」をご参照ください。channelHost のフォーマットは {productKey}.iot-as-mqtt.{region}.aliyuncs.com:1883 です。コード例:

    public void init(final DeviceInfoData deviceInfoData) {
        this.pk = deviceInfoData.productKey;
        this.dn = deviceInfoData.deviceName;
        LinkKitInitParams params = new LinkKitInitParams();
        /**
         * MQTT 初期化パラメーターを設定します。
         */
        IoTMqttClientConfig config = new IoTMqttClientConfig();
        config.productKey = deviceInfoData.productKey;
        config.deviceName = deviceInfoData.deviceName;
        config.deviceSecret = deviceInfoData.deviceSecret;
        config.channelHost = pk + ".iot-as-mqtt." + deviceInfoData.region + ".aliyuncs.com:1883";
        /**
         * オフラインメッセージを受信するかどうかを指定します。
         * これは MQTT の cleanSession フィールドに対応します。
         */
        // ...
    }
  7. HelloWorld.java ファイルを実行してデバイスを接続します。

結果の検証

デバイス側 SDK が実行されると、デバイスオンライン通知がサーバー側サブスクリプションを介して Simple Message Queue (formerly MNS) キューに送信されます。その後、Simple Message Queue (formerly MNS) SDK はキューからメッセージを消費して削除します。

次の例は、Simple Message Queue (formerly MNS) SDK がメッセージを正常に受信して削除したときの出力を示しています。

message handle: 519xxx...AgMA==
message body:
  {"payload":"eyJsYXN0xxx...IiwiY2xpZW5xxx...","topic":"/as/mqtt/status/xxx/device1","messageid":15xxx,"timestamp":1661158432}
message id: 51xxx...C49
message dequeue count:1
delete message successfully.