阅读1029 返回首页    go 新东方


主题使用手册__Java SDK_SDK使用手册_消息服务-阿里云

本文档介绍如何使用java sdk中的sample代码,完成创建主题、创建订阅,发布消息、接收消息以及删除主题等操作。

1. 准备

  • 下载最新版java sdk,解压到aliyun-sdk-mns-samples文件夹;
  • 用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;
  • 在用户目录(Linux系统为”/home/YOURNAME/“目录或者Windows系统为 “C:UsersYOURNAME”目录)中创建.aliyun-mns.properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:
    • AccessKeyId、AccessKeySecret
    • Endpoint
      • 访问MNS的接入地址,登陆MNS控制台 单击右上角 获取Endpoint 查看;
      • 不同地域的接入地址不同,分为公网以及内网域名;

2. 创建主题

下面给出了创建主题的代码示例,有关主题详细信息请参考详情;

  1. public class CreateTopicDemo {
  2. public static void main(String[] args) {
  3. CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
  4. MNSClient client = account.getMNSClient(); // 在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全
  5. String topicName = "TestTopic";
  6. TopicMeta meta = new TopicMeta();
  7. meta.setTopicName(topicName);
  8. try {
  9. CloudTopic topic = client.createTopic(meta);
  10. } catch (Exception e)
  11. e.printStackTrace();
  12. System.out.println("create topic error, " + e.getMessage());
  13. }
  14. client.close();
  15. }
  16. }

3. 启动HttpEndpoint

aliyun-sdk-mns-samples中有一个HttpEndpoint.java类,简单实现了一个本地启动的Http消息接收端,主要功能包括:

  1. 对MNS推送消息请求做签名验证;
  2. 解析推送请求的消息body体;
  3. 返回相应的处理返回码:200;

HttpEndpoint的具体实现源码可参考sdk中源码;

4. 创建订阅

对已经创建好的主题Topic进行订阅,在订阅时需要设置对应的推送Endpoint地址(目前支持HTTP、邮件以及队列)、错误重试策略、推送消息格式等;

  1. public class SubscribeDemo {
  2. public static void main(String[] args) {
  3. CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
  4. MNSClient client = account.getMNSClient(); // 在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全
  5. CloudTopic topic = client.getTopicRef("TestTopic");
  6. try {
  7. SubscriptionMeta subMeta = new SubscriptionMeta();
  8. subMeta.setSubscriptionName("TestSub");
  9. subMeta.setEndpoint(HttpEndpoint.GenEndpointLocal());
  10. subMeta.setNotifyContentFormat(SubscriptionMeta.NotifyContentFormat.XML);
  11. String subUrl = topic.subscribe(subMeta);
  12. System.out.println("subscription url: " + subUrl);
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. System.out.println("subscribe/unsubribe error");
  16. }
  17. client.close();
  18. }
  19. }

5.发布消息

在创建好主题以及订阅之后,并且已经启动了HttpEndpoint,我们可以向Topic发布消息。

  1. public class PublishMessageDemo {
  2. public static void main(String[] args) {
  3. CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
  4. MNSClient client = account.getMNSClient(); // 在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全
  5. CloudTopic topic = client.getTopicRef("TestTopic");
  6. try {
  7. TopicMessage msg = new Base64TopicMessage(); //可以使用TopicMessage结构,选择不进行Base64加密
  8. msg.setMessageBody("hello world!");
  9. msg = topic.publishMessage(msg);
  10. System.out.println(msg.getMessageId());
  11. System.out.println(msg.getMessageBodyMD5());
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. System.out.println("subscribe error");
  15. }
  16. client.close();
  17. }
  18. }

6. 查看HttpEndpoint接收消息

第5步发布了一条消息到Topic中,MNS会将该消息推送到所有的订阅Endpoint,本例中的HttpEndpoint会将接收到的消息打印出来。

7. 取消订阅

如果不需要接收主题的消息,则可以选择取消订阅。

  1. public class UnsubscribeDemo {
  2. public static void main(String[] args) {
  3. CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
  4. MNSClient client = account.getMNSClient(); // 在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全
  5. CloudTopic topic = client.getTopicRef("TestTopic");
  6. try {
  7. topic.unsubscribe("TestSub");
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. System.out.println("unsubribe error");
  11. }
  12. client.close();
  13. }
  14. }

8.删除主题

最后选择将Topic删除。

  1. public class DeleteTopicDemo {
  2. public static void main(String[] args) {
  3. CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
  4. MNSClient client = account.getMNSClient(); // 在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全
  5. CloudTopic topic = client.getTopicRef("TestTopic");
  6. try {
  7. topic.delete();
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. System.out.println("delete topic error");
  11. }
  12. client.close();
  13. }
  14. }

最后更新:2016-11-23 16:04:12

  上一篇:go 队列使用手册__Java SDK_SDK使用手册_消息服务-阿里云
  下一篇:go 发送消息示例代码__Java SDK_SDK使用手册_消息服务-阿里云