トピック操作
このドキュメントでは、CreateTopic、CreateSubscription、PublishMessage、ReceiveMessage、DeleteTopic など、MNS の Java SDK でサンプルコードを使用する方法を紹介します。
1. 事前準備
- Java SDK の最新バージョンをダウンロードし、aliyun-sdk-mns-samples フォルダに解凍します。
- フォルダ alien-idk-mns-samples の下にある maven プロジェクトをインポートします。
- ユーザフォルダー(/home/YOURNAME/)の下に、endpoint、AccessKeyID、AccessKeySecret で構成ファイルを作成します。
- ファイルサンプルを設定します。
注意:mns.accountendpoint=http://$accountid.mns.$region.aliyuncs.com
mns.accesskeyid=$your_accesskeyid
mns.accesskeysecret=$your_accesskeysecret
- AK は $your_accesskeyid と $your_accesskeysecret の略称で、上の設定ファイルで Alibaba Cloud Service にアクセスするために使用されます。 AK はメインアカウントまたは RAM アカウントから使用できます。
- mns.accountendpoint は、Alibaba Cloud Message Service のアクセスポイントです。Message Service コンソールの右上にある [エンドポイントの取得] ボタンをクリックすると取得できます。
2. トピックの作成
サンプルコードでトピックの作成方法を示します。
public class CreateTopicDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient(); // CloudAccount と MNSClient の両方がスレッドセーフの場合、アプリケーションコードは sigleton モードを使用することが推奨
String topicName = "TestTopic";
TopicMeta meta = new TopicMeta();
meta.setTopicName(topicName);
try {
CloudTopic topic = client.createTopic(meta);
} catch (Exception e)
e.printStackTrace();
System.out.println("create topic error, " + e.getMessage());
}
client.close();
}
}
3. HttpEndpoint の開始
サンプルコードファイル HttpEndpoint.java は、以下の機能を含むローカル HTTP メッセージ受信機があるフォルダ aliyun-sdk-mns-samples の下にあります。
MNS からのプッシュリクエストの署名を検証
リクエストをプッシュするために本文を解析
プッシュリクエストの戻りコード 200 に応答
HttpEndpoint でのソースコードの実装については、SDK のソースコードを参照してください。Java SDK の src/main/java/com/aliyun/mns/sample フォルダにサンプルコードファイル “HttpEndpoint.java” があります。
4. 購読の作成
エンドポイント、再試行ポリシー、メッセージフォーマットは購読の作成時に設定する必要があります。
public class SubscribeDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
CloudTopic topic = client.getTopicRef("TestTopic");
try {
SubscriptionMeta subMeta = new SubscriptionMeta();
subMeta.setSubscriptionName("TestSub");
subMeta.setEndpoint(HttpEndpoint.GenEndpointLocal());
subMeta.setNotifyContentFormat(SubscriptionMeta.NotifyContentFormat.XML);
//subMeta.setFilterTag("filterTag"); //Set filterTag for subscription
String subUrl = topic.subscribe(subMeta);
System.out.println("subscription url: " + subUrl);
} catch (Exception e) {
e.printStackTrace();
System.out.println("subscribe/unsubribe error");
}
client.close();
}
}
5. メッセージのパブリッシュ
トピックと購読を作成後、メッセージをトピックにパブリッシュします。
public class PublishMessageDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
CloudTopic topic = client.getTopicRef("TestTopic");
try {
TopicMessage msg = new Base64TopicMessage();
msg.setMessageBody("hello world!");
//msg.setMessageTag("filterTag"); //Set filterTag filterTag
msg = topic.publishMessage(msg);
System.out.println(msg.getMessageId());
System.out.println(msg.getMessageBodyMD5());
} catch (Exception e) {
e.printStackTrace();
System.out.println("subscribe error");
}
client.close();
}
}
6. HttpEndpoint 内のメッセージの確認
MNS は、ステップ 5 で公開されたメッセージをエンドポイントにプッシュします。
7. サブスクリプションのキャンセル
トピックからメッセージを受信したくない場合は、購読をキャンセルします。
public class UnsubscribeDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
CloudTopic topic = client.getTopicRef("TestTopic");
try {
topic.unsubscribe("TestSub");
} catch (Exception e) {
e.printStackTrace();
System.out.println("unsubribe error");
}
client.close();
}
}
8. トピックの削除
public class DeleteTopicDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
CloudTopic topic = client.getTopicRef("TestTopic");
try {
topic.delete();
} catch (Exception e) {
e.printStackTrace();
System.out.println("delete topic error");
}
client.close();
}
}
9. FilterTag(An End2End Case) の使用例
package com.aliyun.mns.samples;
import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudQueue;
import com.aliyun.mns.client.CloudTopic;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.utils.ServiceSettings;
import com.aliyun.mns.model.*;
public class TopicSample {
public static void main(String[] args) {
CloudAccount account = new CloudAccount(
ServiceSettings.getMNSAccessKeyId(),
ServiceSettings.getMNSAccessKeySecret(),
ServiceSettings.getMNSAccountEndpoint());
MNSClient client = account.getMNSClient();
// step 1 : キューの作成
QueueMeta queueMeta = new QueueMeta();
queueMeta.setQueueName("TestSubForQueue");
CloudQueue queue = client.createQueue(queueMeta);
// step 2 : トピックの作成
TopicMeta topicMeta = new TopicMeta();
topicMeta.setTopicName("TestTopic");
CloudTopic topic = client.createTopic(topicMeta);
// step 3 : 購読の作成
SubscriptionMeta subMeta = new SubscriptionMeta();
subMeta.setSubscriptionName("TestForQueueSub");
subMeta.setNotifyContentFormat(SubscriptionMeta.NotifyContentFormat.SIMPLIFIED);
subMeta.setEndpoint(topic.generateQueueEndpoint("TestSubForQueue"));
subMeta.setFilterTag("filterTag");
topic.subscribe(subMeta);
// step 4 : メッセージをパブリッシュ
TopicMessage msg = new Base64TopicMessage();
msg.setMessageBody("hello world");
msg.setMessageTag("filterTag");
msg = topic.publishMessage(msg);
// step 5 : キューからメッセージを取得
Message msgReceive = queue.popMessage(30);
System.out.println("ReceiveMessage From TestSubForQueue:");
System.out.println(msgReceive.getMessageBody());
System.exit(0);
}
}