このトピックでは、ApsaraMQ for MQTT を使用して、デフォルトでサポートされている MQTT プロトコルを介してメッセージをパブリッシュおよびサブスクライブする方法のクイックスタートガイドを提供します。
MQTT 以外のプロトコル (China New Energy Vehicle National Standards など) を介して Message Queue for MQTT インスタンスにアクセスする場合は、ApsaraMQ for MQTT Platinum Edition インスタンスを購入する必要があります。Platinum Edition インスタンスのドキュメントとテクニカルサポートサービスは、専用のチャネルで提供されます。
注意事項
ApsaraMQ for MQTT は、バックエンドメッセージストレージキューと併用する必要があります。次の点に注意してください。
ApsaraMQ for MQTT インスタンスは、モバイルインターネットおよび IoT のシナリオでクライアント接続を維持し、メッセージを転送するために使用されるステートレスゲートウェイインスタンスです。Message Queue for MQTT インスタンスは、メッセージデータの永続性をサポートしていません。したがって、メッセージを保存し、メッセージデータの永続性をサポートするために、メッセージストレージインスタンスを設定する必要があります。
各 ApsaraMQ for MQTT インスタンス (ゲートウェイインスタンス) は、ストレージインスタンス (ApsaraMQ for RocketMQ インスタンス) にバインドする必要があります。
現在、メッセージストレージインスタンスとして使用できるのは、ApsaraMQ for RocketMQ バックエンドストレージインスタンスのみです。
同じリージョンに作成できる ApsaraMQ for MQTT インスタンスの数は限られています。ApsaraMQ for MQTT インスタンスは、1 つの ApsaraMQ for RocketMQ インスタンスにのみバインドできます。1 つのリージョンに作成できるインスタンスの最大数については、コンソールのプロンプトを参照してください。
ApsaraMQ for MQTT を使用する前に、次のネットワークアクセス制限に注意してください。
同じリージョンの同じインスタンス上のトピックとグループ ID のみが相互接続できます。たとえば、[中国 (北京)] リージョンのインスタンス A にトピックが作成されている場合、そのトピックには、[中国 (北京)] リージョンのインスタンス A に作成されたグループ ID を持つ ApsaraMQ for MQTT クライアント (以下、クライアント) のみアクセスできます。
手順
プロセスは、ApsaraMQ for MQTT を使用してメッセージをパブリッシュおよびサブスクライブする方法を示しています。
図 1. プロセス
プロセスに示すように、クライアントでメッセージをパブリッシュおよびサブスクライブする前に、リソースを作成する必要があります。そうしないと、ApsaraMQ for MQTT ブローカーは、クライアントへの無効な接続を拒否します。
前提条件
ApsaraMQ for RocketMQ がアクティブ化されている。Message Queue for Apache RocketMQ がアクティブ化されていない場合は、アクティブ化してください。
Alibaba Cloud AccessKey ペアを取得している。詳細については、「AccessKey ペアの取得」をご参照ください。
ステップ 1: リソースを作成する
次のリソースを作成する必要があります。
クライアント接続を維持し、メッセージを転送するために使用される ApsaraMQ for MQTT インスタンス
メッセージを保存するために使用されるメッセージストレージインスタンス。 ApsaraMQ for RocketMQ インスタンスのみがサポートされています。
レベル 1 のトピックであり、メッセージのパブリッシュとサブスクライブに使用される親トピック
クライアントを識別するために使用されるグループ ID
リージョンを選択します。
ビジネスニーズに基づいて、リソースを作成するリージョンを選択します。
Message Queue for MQTT コンソール にログオンします。
上部のナビゲーションバーで、リソースを作成するリージョン ( [中国 (北京)] など) を選択します。
ApsaraMQ for MQTT インスタンスを作成します。
最初に、ApsaraMQ for MQTT インスタンスを作成する必要があります。インスタンスを作成する前に、次の点に注意してください。
各リージョンに作成できるすべてのタイプのインスタンスの数は限られています。具体的な制限については、コンソールのプロンプトを参照してください。
ビジネスシナリオに基づいて、1 秒あたりのトランザクション数 (TPS)、接続数、およびサブスクリプション数を推定します。適切なインスタンス仕様を選択します。サブスクリプションインスタンスの場合、小さすぎる仕様を選択すると、サービススロットリングがトリガーされ、サービスに影響を与える可能性があります。
Basic Edition インスタンスは、購入後すぐに有効になります。Platinum Edition インスタンスは、購入後、デプロイに時間がかかります。インスタンスが使用可能になったら通知されます。
ApsaraMQ for MQTT インスタンスを作成するには、次の手順を実行します。
左側のナビゲーションペインで、[概要] をクリックします。
[インスタンス] ページで、[インスタンスの作成] をクリックします。
表示されるページで、ApsaraMQ for MQTT インスタンスタイプを選択し、必要に応じて設定を指定します。画面の指示に従って購入を完了します。
[概要] ページに戻ります。インスタンスリストで購入または作成した ApsaraMQ for MQTT インスタンスを表示できます。
ストレージインスタンスを作成してバインドします。
ApsaraMQ for MQTT インスタンスを作成した後、トピックとメッセージを保存するインスタンスも作成する必要があります。現在、トピックとメッセージを保存するために作成できるのは、ApsaraMQ for RocketMQ インスタンスのみです。次に、ApsaraMQ for RocketMQ インスタンスを ApsaraMQ for MQTT インスタンスにバインドします。
インスタンスをバインドする際には、次の制限に注意してください。
ApsaraMQ for MQTT インスタンスは 1 回だけバインドでき、バインドが完了すると、バインドされたメッセージストレージインスタンスを変更することはできません。
各ストレージインスタンスは、1 つの ApsaraMQ for MQTT インスタンスにのみバインドできます。1 対多のバインドはサポートされていません。
バインドする 2 つのインスタンスは、同じ名前空間タイプである必要があります。排他的名前空間を持つインスタンスは、非排他的名前空間を持つインスタンスにバインドできません。
ApsaraMQ for MQTT インスタンスにバインドされているストレージインスタンスを削除すると、ApsaraMQ for MQTT インスタンスが使用できなくなる可能性があります。
ストレージインスタンスを作成してバインドするには、次の手順を実行します。
左側のナビゲーションペインで、[概要] をクリックします。作成した ApsaraMQ for MQTT インスタンスを選択し、[設定の構成] をクリックします。
[メッセージ永続性設定] ダイアログボックスで、インスタンスの状況と要件に基づいてパラメーターを設定します。
ApsaraMQ for RocketMQ インスタンスを購入済みの場合は、[既存のインスタンスを選択] を選択します。このオプションを選択すると、作成または購入したメッセージストレージインスタンスのリストが表示されます。メッセージストレージインスタンスとして使用する既存の ApsaraMQ for RocketMQ インスタンスをクリックし、[確認] をクリックしてバインドを完了します。
図 2. 既存のインスタンスを選択する

ApsaraMQ for RocketMQ インスタンスを購入していない場合は、次のオプションを選択します。
[共有インスタンスの作成]: ApsaraMQ for RocketMQ Standard Edition インスタンスを作成する必要があります。インスタンス名と説明を入力します。次に、[OK] をクリックします。
図 3. 共有インスタンスを作成する

[platinum インスタンスの購入]: ApsaraMQ for RocketMQ Platinum Edition インスタンスを作成する必要があります。[platinum インスタンスの購入] を選択し、[今すぐ購入] をクリックします。画面の指示に従って、インスタンスを購入または作成します。
図 4. Platinum Edition インスタンスを作成する

インスタンスが作成された後、手順 i と ii を繰り返し、[既存のインスタンスを選択] を選択します。ApsaraMQ for RocketMQ インスタンスをクリックし、[OK] をクリックしてバインディングを完了します。
トピックを作成します。
MQTT 経由でメッセージをパブリッシュおよびサブスクライブするには、MQTT パレントトピックを作成する必要があります。異なるレベルのサブトピックは、コンソールで作成する必要なく、コードで直接追加できます。
ApsaraMQ for MQTT インスタンスとストレージインスタンスの間には、1 対 1 のバインディング関係が確立されます。したがって、トピックは実際にはストレージインスタンス上に作成され、ApsaraMQ for MQTT コンソールにマッピングされます。Message Queue for Apache RocketMQ コンソールですべてのトピック操作を実行することもできます。
ApsaraMQ for RocketMQ を使用するときにトピックを作成済みの場合は、そのトピックを直接使用することもできます。トピックを作成していない場合は、次の手順を実行してトピックを作成します。
左側のナビゲーションペインで、[メッセージストレージ] をクリックします。
[トピック] ページで、作成した ApsaraMQ for MQTT インスタンスを選択し、[トピックの作成] をクリックします。
[トピックの作成] ダイアログボックスで、トピック名を入力し、トピックに対して保存、パブリッシュ、およびサブスクライブするメッセージのタイプを選択し、備考を入力します。次に、[OK] をクリックします。
説明ApsaraMQ for MQTT クライアントを使用して順序付けられたメッセージをパブリッシュするには、順序付けられたメッセージタイプを選択します。現在、ApsaraMQ for MQTT クライアントは、消費シナリオでは厳密な順序付けメッセージをサポートしていません。
グループIDを作成します。
ApsaraMQ for MQTTでは、グループIDは、ロジックと機能が同一のノードのグループを指定します。グループIDは、同じ機能を持つデバイスのセットを表します。グループIDとデバイスIDは、Message Queue for MQTTクライアントのクライアントIDを識別するために一緒に使用されます。詳細については、「用語」をご参照ください。
左側のナビゲーションペインで、[グループ] をクリックします。
[グループ] ページで、作成した ApsaraMQ for MQTT インスタンスを選択し、[グループIDの作成] をクリックします。
図 5. グループIDの作成

[グループIDの作成] ダイアログボックスで、グループIDを入力し、[OK] をクリックします。
グループIDが作成されると、新しいグループIDが [グループ] ページに表示されます。[グループ] ページには、現在のリージョン内のすべてのグループIDが表示されます。
説明グループIDを使用しなくなった場合は、できるだけ早く削除してください。
グループIDは、作成したアカウントのみが使用できます。Alibaba Cloudアカウントによって作成されたグループIDは、Alibaba CloudアカウントのResource Access Management ( RAM ) ユーザーは使用できません。RAMユーザーは、個別に独自のグループIDを作成する必要があります。
ステップ 2: エンドポイントを取得する
SDK を使用してメッセージをパブリッシュおよびサブスクライブするには、SDK で ApsaraMQ for MQTT インスタンスのエンドポイントを指定する必要があります。 ApsaraMQ for MQTT インスタンスのエンドポイントは、エンドポイントのドメイン名とポートで構成されます。
ApsaraMQ for MQTT インスタンスが ApsaraMQ for RocketMQ インスタンスにバインドされると、エンドポイント情報は [エンドポイント情報] セクションに表示されます。エンドポイント情報を取得できます。
ApsaraMQ for MQTT インスタンスが ApsaraMQ for RocketMQ インスタンスにバインドされた後、次の手順を実行してエンドポイントを取得することもできます。
コンソールのトップナビゲーションバーで、作成されたリソースが配置されているリージョンを選択し、左側のナビゲーションペインで [インスタンス] をクリックします。
デフォルトで表示される [インスタンス] ページで、作成した ApsaraMQ for MQTT インスタンスを選択し、[インスタンス情報] タブをクリックします。
[インスタンス情報] タブページで、[エンドポイント情報] セクションのエンドポイントのドメイン名を確認します。
図 6. エンドポイントを取得する

ApsaraMQ for MQTT は、インターネットアクセスポイント と VPC アクセスポイント を提供します。
インターネットアクセスポイント は、インターネット経由で ApsaraMQ for MQTT にアクセスするために使用される IP アドレスです。ほとんどの場合、パブリックエンドポイントは IoT およびモバイルインターネットのシナリオで使用されます。
VPC アクセスポイント は、プライベート仮想クラウド (VPC) 内で ApsaraMQ for MQTT にアクセスするために使用される IP アドレスです。ほとんどの場合、VPC エンドポイントはクラウドアプリケーションによって ApsaraMQ for MQTT に接続するために使用されます。
エンドポイントを使用してクライアントを ApsaraMQ for MQTT に接続する場合は、IP アドレスではなくドメイン名を使用してください。IP アドレスは動的に変化するためです。 ApsaraMQ for MQTT 技術チームは、次のシナリオにおける障害および直接的または間接的な損失について責任を負いません。
IP アドレスを使用してクライアントを ApsaraMQ for MQTT にアクセスします。ApsaraMQ for MQTT の技術チームがドメイン名解決を更新した後、元の IP アドレスは無効になります。
クライアントが実行されているネットワークで、IP アドレスに対するファイアウォールポリシーが設定されています。ApsaraMQ for MQTT の技術チームがドメイン名解決を更新した後、ファイアウォールポリシーにより新しい IP アドレスがブロックされます。
ポート
現在、ApsaraMQ for MQTT は、TCP 上の MQTT、MQTT SSL、WebSocket、WebSocket SSL/TLS、および Flash をサポートしています。対応するサービスポートは、ポート にリストされています。必要に応じて、エンドポイントのポート番号を置き換えてください。
ApsaraMQ for MQTT は単方向 SSL 暗号化を提供するため、クライアントに証明書をアップロードする必要はありません。サーバー側の証明書は、リクエストハンドシェイクで自動的に発行され、エンドポイントのドメイン名に厳密にバインドされます。そのため、カスタム証明書暗号化はサポートされていません。
表 1. ポート
TCP 上の MQTT | SSL | WebSocket | WebSocket SSL/TLS | Flash |
1883 | 8883 | 80 | 443 | 843 |
手順 3:SDK を使用してメッセージをパブリッシュおよびサブスクライブする
クライアント SDK をダウンロードします。さまざまな言語の SDK のダウンロードアドレスについては、[SDK のダウンロード] をご参照ください。
ApsaraMQ for MQTT はデフォルトで標準 MQTT プロトコルをサポートしているため、オープンソースのサードパーティ製クライアント SDK を使用することをお勧めします。目的の言語のクライアント SDK がリストされていない場合は、インターネットで MQTT 互換の SDK を検索してください。
デモプロジェクトをダウンロードし、対応するパラメーターの説明を表示すれば、デモを実行してメッセージをパブリッシュおよびサブスクライブできます。デモのダウンロードアドレスについては、[デモプロジェクト] をご参照ください。
現在のデモライブラリは、いくつかの主要な言語のみを網羅しており、後で更新されます。対応する開発言語が網羅されていない場合は、Java デモをダウンロードして変更してください。デモプロジェクトは基本的な機能のみを示しています。アプリケーションと本番環境に基づいてすべてのパラメーターを変更する必要があります。
追加情報
SDKまたはAPIを使用してメッセージをパブリッシュするだけでなく、コンソールでメッセージをパブリッシュして、次の手順を実行することでトピックの可用性をすばやく確認することもできます。
左側のナビゲーションペインで、[メッセージストレージ] をクリックします。
[メッセージストレージ] ページの [トピック] セクションで、作成したトピックを見つけ、[アクション] 列の [送信] をクリックします。
図 7. メッセージをパブリッシュする

[メッセージの送信] ダイアログボックスで、メッセージ属性を設定し、メッセージコンテンツを入力して、[OK] をクリックします。
コンソールは、メッセージが送信されたこと、および対応するメッセージIDを示す通知を返します。
図 8. メッセージが送信されました
