ここでは、デバイスから報告されるメッセージをサーバーに送信する方法について説明します。

始める前に

  • Alibaba Cloud アカウントを持っている必要があります。
  • Alibaba Cloud IoT Platform が有効化されている必要があります。

    Alibaba Cloud IoT Platform を有効にしていない場合は、[プロダクト詳細] ページに移動して [今すぐ有効化] をクリックします。 ページの指示に従って、サービスを有効化します。

  • MQ (Message Queue) が有効化されている必要があります。 サービスを有効化する方法の詳細は、「MQ サービスの有効化」をご参照ください。

このタスクについて

推奨されるアーキテクチャ : デバイス > IoT Platform -> MQ キュー > サーバー

MQ をバッファーとして使用して、デバイスからサーバーに送信されるメッセージの割合を正規化できます。

メッセージを MQ に送信できるようにするには、以下の手順に従います。
  • MQTT (Message Queuing Telemetry Transport) プロトコルを使用して、/pk/deviceabc/pub などの Topic にデータを報告します。 MQTT プロトコルを使用して、Topic にデバイスデータを送信します。
  • IoT Platform コンソールで、データを MQ に送信するためのルールを作成し、設定します。
  • MQ クライアントを介して、サーバーでメッセージを取得できるようになります。

手順

  1. IoT Platform コンソールにログインします。
  2. 左側のナビゲーションウィンドウで、[プロダクト] をクリックします。 MQ_test などの名前でプロダクトを作成します。 ノードタイプをデバイスに設定します。
  3. 左側のナビゲーションウィンドウで、[デバイス] をクリックします。 表示されたページで、ドロップダウンリストから MQ_test を選択します。 [デバイスの追加] をクリックして、デバイス名を指定します (devicename など)。
  4. デバイスを見つけて、[表示] をクリックします。 左側のナビゲーションウィンドウで、[Topic リスト] をクリックします (図 1 参照) 。
    図 1. Topic リスト

    デバイスは、Topic リストに含まれる Topic に基づいてパブリッシュ/サブスクライブ通信を実行できます。 詳細は、「システム定義トピック」をご参照ください。

  5. MQ リソースを適用します。
    1. MQ コンソールにログインします。
    2. [Topic の作成] をクリックします。

      [Topic の作成] ページ (図 2 参照) が表示されます。

      図 2. Topic の作成
    3. 以下の順にクリックして (詳細 > 権限の付与)、この Topic のサブスクライブ権限を Topic 所有者に付与します。
    4. コンシューマーのステータスを確認するには、以下のコードを実行します。 たとえば、オンラインかどうかや、サブスクリプションが一致しているかどうかを確認します。
      
      package com.aliyun.openservices.tcp.example.consumer;
      import com.aliyun.openservices.log.Client;
      import com.aliyun.openservices.ons.api.ConsumeContext;
      import com.aliyun.openservices.ons.api.Consumer;
      import com.aliyun.openservices.ons.api.Message;
      import com.aliyun.openservices.ons.api.MessageListener;
      import com.aliyun.openservices.ons.api.ONSFactory;
      import com.aliyun.openservices.ons.api.PropertyKeyConst;
      import java.util.Properties;
      public class ConsumerTest {
      public static void main(String[] args) {
      Properties properties = new Properties();
      // The consumer ID that you have created in the console.
      properties.put(PropertyKeyConst.ConsumerId, "CID_IOT_TEST_01");
      // Your AccessKey, which was created in Alibaba Cloud Management Console and used for authentication.
      properties.put(PropertyKeyConst.AccessKey, "*****");
      // Your SecretKey, which was created in Alibaba Cloud Management Console and used for authentication.
      properties.put(PropertyKeyConst.SecretKey, "*****");
      // Specify a domain name used for TCP access. (The production environment hosted on Alibaba Cloud is used here as an example.)
      properties.put(PropertyKeyConst.ONSAddr,
      "http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet");
      // Clustering subscription (default)
      // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING);
      // Broadcasting subscription
      // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);
      Consumer consumer = ONSFactory.createConsumer(properties);
      consumer.subscribe("iotx_test_mq", "", new MessageListener() { //Subscribe to all tags.
      @Override
      public Action consume(Message message, ConsumeContext context) {
      System.out.println("Receive: " + message);
      return Action.CommitMessage;
      }
      });
      // Subscribe to another topic.
      consumer.subscribe("TopicTestMQ-Other", "TagA||TagB", new MessageListener() { //Subscribe to multiple tags.
      @Override
      public Action consume(Message message, ConsumeContext context) {
      System.out.println("Receive: " + message);
      return Action.CommitMessage;
      }
      });
      consumer.start();
      System.out.println("Consumer Started");
      }
      }
      AccessKey および SecretKey を作成する方法の詳細は、「AccessKey の作成」をご参照ください。
  6. デバイスメッセージを MQ に送信できるようにするルールを作成し、設定します。
    1. IoT Platform コンソールにログインします。
    2. IoT Platform コンソールにログインします。 左側のナビゲーションウィンドウで、[ルールエンジン] をクリックします。 [ルールの作成] をクリックします。 ルールの詳細は、「概要」をご参照ください。
      新しく作成したルールを設定するには、IoT Platform コンソールで以下の操作を実行します。
      • データを処理する SQL 文を作成します。 SQL 文に Topic を指定する際、作成したプロダクトの名前を選択します。
      • MQ へのデータ送信操作を追加し、前の手順で作成した Topic を選択して、この Topic にデータを送信できるようにします。
    3. このルールを有効にして、このルールのステータスが実行中であることを確認します。
  7. デバイスメッセージの送信をシミュレートします。
    • メッセージの送信 :
    • 返される結果 :
  8. MQ コンソールでメッセージを確認します。
    1. MQ リソースのリクエストで実行されるコードを図 3 に示します。
      図 3. MQ リソースのリクエストで使用されるコード
    2. MQ コンソールにログインします。 左側のナビゲーションウィンドウで、[メッセージの照会] をクリックします。 Topic 名またはメッセージ ID を使用して、デバイスから送信されたメッセージを照会すると、メッセージが MQ に送信されたかどうかを確認できます。
      MQ で受信したメッセージのタイプ
      {"snr":"93"}