MNS とは何ですか?
- MNS は、Message and Notification Service (メッセージおよび通知サービス) の略です。これは Alibaba Cloud が提供する、効率的で信頼性と安全性が高く、便利で、弾力的なスケーラビリティを備えた分散型のメッセージおよび通知サービスです。
- アプリケーション開発者はアプリケーションの分散コンポーネントの間でデータを自由に転送できるため、疎結合のシステムを構築できます。
MNS の用途は何ですか?
典型的なアプリケーションシナリオは次のとおりです。
- MNS を他の Alibaba Cloud プロダクトと統合して、アプリケーションの信頼性と柔軟性を高めます。
- MNS を作業キューに使用します。キュー内の各メッセージは 1 つのタスクに対応し、1 つのプロセスで完了する必要があります。1 つまたは複数の ECS がキューからタスクを読み取り、実行することができます。
- サービスプロセス内の主要なイベントの通知を MNS に保管します。各イベントに対して、キュー内に 1 つの対応するメッセージが存在します。イベントを取得する必要があるアプリケーションは、対応するメッセージを読み取り、処理します。
各リージョンのメッセージサービスのアクセスアドレスは何ですか?
リージョン | パブリックアクセスアドレス | プライベートアクセスアドレス | VPC プライベートアクセスアドレス |
---|---|---|---|
青島 (中国北部 1) | http(s)://{AccountId}.mns.cn-qingdao.aliyuncs.com | http://{AccountId}.mns.cn-qingdao-internal.aliyuncs.com | Unavailable for the moment |
北京 (中国北部 2) | http(s)://{AccountId}.mns.cn-beijing.aliyuncs.com | http://{AccountId}.mns.cn-beijing-internal.aliyuncs.com | http://{AccountId}.mns.cn-beijing-internal-vpc.aliyuncs.com |
杭州 (中国東部 1) | http(s)://{AccountId}.mns.cn-hangzhou.aliyuncs.com | http://{AccountId}.mns.cn-hangzhou-internal.aliyuncs.com | http://{AccountId}.mns.cn-hangzhou-internal-vpc.aliyuncs.com |
上海 (中国東部 2) | http(s)://{AccountId}.mns.cn-shanghai.aliyuncs.com | http://{AccountId}.mns.cn-shanghai-internal.aliyuncs.com | http://{AccountId}.mns.cn-shanghai-internal-vpc.aliyuncs.com |
深セン (中国南部 1) | http(s)://{AccountId}.mns.cn-shenzhen.aliyuncs.com | http://{AccountId}.mns.cn-shenzhen-internal.aliyuncs.com | http://{AccountId}.mns.cn-shenzhen-internal-vpc.aliyuncs.com |
シンガポール | http(s)://{AccountId}.mns.ap-southeast-1.aliyuncs.com | http://{AccountId}.mns.ap-southeast-1-internal.aliyuncs.com | http://{AccountId}.mns.ap-southeast-1-internal-vpc.aliyuncs.com |
シリコンバレー (米国西部 1) | http(s)://{AccountId}.mns.us-west-1.aliyuncs.com | http://{AccountId}.mns.us-west-1-internal.aliyuncs.com | http://{AccountId}.mns.us-west-1-internal-vpc.aliyuncs.com |
東京 (日本) | http(s)://{AccountId}.mns.ap-northeast-1.aliyuncs.com | http://{AccountId}.mns.ap-northeast-1-internal.aliyuncs.com | |
シドニー (オーストラリア) | http(s)://{AccountId}.mns.ap-southeast-2.aliyuncs.com | http://{AccountId}.mns.ap-southeast-2-internal.aliyuncs.com | |
ドバイ (UAE) | http(s)://{AccountId}.mns.me-east-1.aliyuncs.com | http://{AccountId}.mns.me-east-1-internal.aliyuncs.com |
データセキュリティのため、メッセージサービスがパブリックネットワークに HTTPS インタフェースを提供しています。パブリックアクセスアドレスに http://
を https://
を入れ換えて利用できます。
AccountId とは何ですか?
AccountId は、Alibaba Cloud の公式 Web サイトにあるユーザーセンターにアクセスできる Alibaba Cloud Account IDです。
メッセージサービスはどのような操作をサポートしていますか?
次の表に、メッセージサービスキューでサポートされている操作コマンドを示します。
操作 | 説明 |
---|---|
CreateQueue | 新しいメッセージキューを作成します。 |
SetQueueAttributes | キューの属性を変更します。 |
GetQueueAttributes | キューの属性を取得します。 |
DeleteQueue | キューを削除します。 |
ListQueue | ユーザー名でキューリストを一覧表示します。 |
SendMessage | 指定されたキューにメッセージを送信します。 |
BatchSendMessage | 指定されたキューにバッチでメッセージを送信します。 |
ReceiveMessage | コンシューマはキュー内のメッセージを消費します。 |
BatchReceiveMessage | コンシューマはキュー内のメッセージをバッチで消費します。 |
DeleteMessage | 消費されたメッセージを削除します。 |
BatchDeleteMessage | バッチで消費されたメッセージを削除します。 |
PeekMessage | キュー内のメッセージを見る。 |
BatchPeekMessage | キュー内のメッセージを一括して表示します。 |
ChangeMessageVisibility | 消費され、現在非アクティブになっているメッセージの次の消費時間を変更します。 |
次の表に、メッセージサービスのトピックでサポートされている操作コマンドを示します。
操作 | 説明 |
---|---|
CreateTopic | 新しいトピックを作成します。 |
SetTopicAttributes | トピックの属性を変更します。 |
GetTopicAttributes | トピックの属性を取得します。 |
DeleteTopic | トピックを削除します。 |
ListTopic | ユーザー名でトピックリストを一覧表示します。 |
Subscribe | トピックを購読します。 |
SetSubscriptionAttributes | サブスクリプションの属性を変更します。 |
GetSubscriptionAttributes | サブスクリプションの属性を取得します。 |
Unsubscribe | 購読したトピックを取り消します。 |
ListSubscriptionByTopic | トピックのサブスクリプションリストを一覧表示します。 |
PublishMessage | トピックにメッセージを公開します。 |
自社開発、商用、またはオープンソースのメッセージキューシステムと比較した MNS の利点は何ですか?
キューを管理するためのシステムを構築することや、商用またはオープンソースのメッセージおよび通知サービスを使用することと比較して、MNS には次の利点があります。
- 初期段階で開発や設定のための大規模な投資が不要です。
- サービスの量が増えても追加のハードウェアや管理リソースが不要です。
- 冗長性のあるメッセージストレージがデフォルトで実装されているため、ハードウェア障害の際にもメッセージは失われず、また、システムの投資、開発、設定、およびデプロイメントが容易です。
- 後の段階で、メッセージおよび通知サービスのためにデプロイメントおよびメンテナンスのリソースを投入する必要がありません。MNS は、簡単な設定だけで運用環境に導入できます。
MNS はどのように使用するのですか?
- Alibaba Cloud アカウントを作成し、MNS オンラインに登録します。
- [User Center] - [My Service] - [Security Authentication] にアクセスして、アクセスキー (AccessKeyID) を取得します。
- 管理コンソールで、キューの作成と削除、メッセージの受信と送信などの基本操作を視覚的に実行します。
- アプリケーションから API (SDK) を起動して、すべての MNS 操作を実行します。
メッセージはシステムの中でどのように識別されるのですか?
- キュー内でメッセージを識別するには、MessageId が使用されます。MessageId は、同じキューの中でのみ一意です。
- メッセージが MNS キューに送られると、MNS によって MessageId が生成されます。生成された MessageId が変更されることはありません。
- メッセージが取得されると、MNS からユーザーにこのリクエストに対応するメッセージ本文、MessageId、および一時的なハンドル (ReceiptHandle) が返されます。ReceiptHandle は、メッセージを取得した後で、有効期間の間にメッセージを削除する際に使用します。
MNS ではロングポーリングはサポートされますか?
はい。従来のショートポーリングと比較すると、ロングポーリングで応答が返されるのはメッセージがキューに入るかロングポーリングがタイムアウトした後です。メッセージが取得可能になると、ロングポーリングは直ちに MNS キュー内のメッセージを単純で効率的な方法によって取得できます。
ロングポーリングの設定については、MNS API のドキュメントで PollingWaitSeconds 属性の説明を参照してください。
MNS はメッセージを FIFO (first-in-first-out) で処理しますか?
MNS は、メッセージができるだけ FIFO 方式で取得されるように試みます。ただし、分散メッセージキューの性質上、必ずしも送信された順番どおりにメッセージを取得できるとは限りません。FIFO を必要とするサービスでは、取得した後で並べ替えられるようにメッセージに連番を追加することをお勧めします。
MNS を他の Alibaba Cloud プロダクトと連携させることはできますか?
MNS を ECS、OSS、OTS などの Alibaba Cloud サービスと連携させて、アプリケーションの柔軟性とスケーラビリティを高めることができます。一般的なケースの 1 つは、互いの間で通信する必要があり、同時に同じサービスボリュームを処理することはできない複数のコンポーネントまたはモジュールを作成する場合です。このケースでは、MNS キューにメッセージを保持すると、ECS インスタンス上で実行されるアプリケーションはメッセージを順番に処理することができます。ECS インスタンスはキューを読み取り、タスクを処理してから、結果を別の MNS キューにメッセージとしてパブリッシュすることが (そこからさらに他のアプリケーションによって処理することも) できます。ECS ではアプリケーションの動的な拡張が可能であるため、アプリケーション開発者はタスクが遅延なく処理されるように、MNS キュー内のメッセージの量 (サービスボリューム) に応じてコンピューティングインスタンスの量を簡単に変更できます。
MNS に保管されるデータの信頼性をどのようにして確保しますか?
MNS では、すべてのキューとメッセージは、高い信頼性と可用性を備えた Alibaba Cloud のデータセンター間を結んで形成されるネットワークに保管されます。すべてのメッセージは、複数のサーバーに冗長モードで保管されます。1 台のサーバーに障害が発生すると、自動的に他のサーバーに冗長データがコピーされます。そのため、MNS キュー内のメッセージのセキュリティは、1 台のサーバーまたは 1 か所のネットワークの障害が発生しただけでは影響を受けません。
MNS では複数のコンシューマーが同時にキューにアクセスしたときに、メッセージが失われたり繰り返し取得されることを、どのようにして防いでいますか?
各 MNS キューには、設定可能な ChangeMessageVisibility 属性 (キューから取得されたメッセージが不可視になる期間) があります。メッセージがキューから取得されると、不可視期間の間、他のコンシューマーはこのメッセージを取得できません。不可視期間の間にユーザーが取得した場合は、一時的なハンドル (ReceiptHandle) を使用してメッセージが削除されます。ユーザーが不可視期間の間に取得しない場合は、不可視期間を延長するリクエスト (ChangeVisibilityTimeout) を送信する必要があります。送信しないと、不可視期間が経過した後、他のコンシューマーがこのメッセージを取得します。
各メッセージは何回受信されますか?
このシステムは、キュー内のすべてのメッセージが少なくとも 1 回必ず取得されるように設計されています。しかし念のため、同じメッセージが何回も処理されたときにエラーや不整合が発生するのを避けるために、アプリケーションサービスのフォールトトレランスを強化することをお勧めします。
キュー内のメッセージのセキュリティを確保するにはどのようにすればよいですか?
Alibaba Cloud は、お使いの MNS キューを不正なアクセスから保護するために、安全かつ信頼性の高い ID 認証メカニズムを用意しています。キューにアクセスできるのは、そのキューを作成した Alibaba Cloud アカウントオーナーだけです。
長いメッセージ保持期間に対応するように MNS を設定するには、どのようにすればよいですか?
メッセージ保持期間を設定するには、SetQueueAttributes を使用して MessageRetentionPeriod 属性を設定します。この属性は、MNS キュー内にメッセージが保持される秒数を指定します。現在、デフォルトのメッセージ保持期間は 4 日です。MessageRetentionPeriod は、60 秒 (1 分) から 1296000 秒 (15 日) の間の値に設定できます。
MNS でメッセージが保持される期間はどのくらいですか?
MNS では、メッセージ保持期間を設定することができます。1 分から 15 日の間の任意の値に設定できます。デフォルト値は 4 日です。メッセージ保持期間が経過したメッセージは自動的に削除されます。メッセージ保持期間を長くすると、柔軟性が高まり、メッセージの生成から取得までの間隔を長くすることができます。
大きなメッセージに対応するように MNS を設定するには、どのようにすればよいですか?
最大メッセージサイズを設定するには、SetQueueAttributes を使用して MaximumMessageSize 属性を設定します。この属性は、MNS キュー内のメッセージのバイト数を指定します。1024 バイト (1 KB) から 65536 バイト (64 KB) の間の任意の値に設定できます。メッセージの長さが 64 KB を超える場合は、データは OSS で格納し、MNS ではそのデータのアクセスアドレスだけを格納することをお勧めします。
長期間メッセージが格納されないキューはどうなりますか?
MNS を通常の方法で使用している限り、アクティブでないキューであっても削除されません。ただし、債務不履行などの理由で MNS が停止された場合は、すべてのキューが削除されます。
なぜ計算された署名がよく間違っていますか?
署名の計算の原理と注意事項については、MNS API のリファレンスマニュアルを参照してください。署名の方法を以下に示します。リクエストの HTTP ヘッダーは次のようになります。
GET /MyQueue HTTP/1.1
Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
Date: Thu, 09 Jul 2015 03:01:34 GMT
x-mns-version:2015-06-06
暗号化される署名のソース文字列は次のようになります。
GET
(line feed)
(line feed)
Thu, 09 Jul 2015 03:01:34 GMT
x-mns-version:2015-06-06
/MyQueue
accessId が TestAccessID、accesskey が TestAccessSecret であるとします。暗号化アルゴリズムによって取得される署名値は、uwx3yeWoILzgmvesW0BQSgfM7b8= です。
名前が同じでリージョンが異なるキューは、同一のものですか?
いいえ。名前が同じでリージョンが異なるキューは、互いに独立した存在です。
キューのインスタンスが削除された後も請求が継続されますか?
キューが不要になった場合は、キューインスタンスを削除した後で、キューに対するすべての API リクエストを停止する必要があります。それ以外の場合、メッセージサービスは API リクエストの数に応じて請求を継続します。
トピックインスタンスが削除された後も請求は継続されますか?
トピックが不要になった場合は、トピックインスタンスが削除されてから翌日にインスタンスの料金が請求されることはありません。トピックのすべての API リクエストを停止する必要があります。それ以外の場合、メッセージサービスは API リクエストの数に応じて請求を継続します。