全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息服务

主题使用手册

更新时间:2017-06-07 13:26:11   分享:   

本文档介绍如何使用csharp sdk中的sample代码,完成创建主题、创建订阅、启动 HttpEndpoint、发布消息、查看HttpEndpoint接收消息和删除主题操作。

1. 准备

  1. 下载最新版csharp sdk,解压后将工程导入到VisualStudio;
  2. 工程里有4个项目,其中一个是AliyunSDK_MNS,这个就是SDK所在的项目。右击这个项目名,选择重新生成,可以在项目的bin目录下找到生成的Aliyun.MNS.dll

    2.1 其他几个项目里都需要引用这个生成的dll,请配置好其他几个项目的“引用”

  3. 在AliyunSDK_MNS_Sample这个项目里,有我们接下来会介绍的队列操作的Sample:SyncTopicOperations.cs

    3.1 将AliyunSDK_MNS_Sample这个项目设置为启动项,并将SyncTopicOperations设置为启动对象

    3.2 打开SyncTopicOperations.cs文件,在文件的最上几行,配置AccessKeyID、AccessKeySecret和Endpoint;

2. 创建主题

  • 如果之前未创建过主题(Topic),那么首先需要创建Topic。默认创建的Topic名称是 TestCSharpTopic,也可以修改代码指定Topic名称;
  1. // 1. 生成一个CreateTopicRequest实例,参数传入topicName。这里可以同时传入TopicAttributes,以便在CreateTopic时同时设置自定义的Topic属性。
  2. var createTopicRequest = new CreateTopicRequest
  3. {
  4. TopicName = _topicName
  5. };
  6. Topic topic = null;
  7. try
  8. {
  9. topic = client.CreateTopic(createTopicRequest);
  10. Console.WriteLine("Create topic successfully, topic name: {0}", topic.TopicName);
  11. }
  12. catch (MNSException me)
  13. {
  14. // 2. 可能因为网络错误,或者Topic已经存在等原因导致CreateTopic失败,这里CatchException并做对应的处理
  15. // 2.1 也可以分别Catch TopicAlreadyExistException等做单独处理
  16. Console.WriteLine("CreateTopic Failed! ErrorCode: " + me.ErrorCode);
  17. }
  18. catch (Exception ex)
  19. {
  20. Console.WriteLine("Create topic failed, exception info: " + ex.Message);
  21. return;
  22. }

3. 启动 HttpEndpoint

  • MNS_CSharp_SDK_Test项目下有一个SampleHttpServer.cs;将它设为启动项目并运行即可,这个SampleHttpServer依赖于.net framework 4.5
  • 请确认本机有公网IP,否则MNS Server无法把消息通过HttpEndpoint推送到你的机器

  • 功能

    • 对 MNS 推送消息请求做签名验证;
    • 解析推送请求的 body;
    • 返回StatusCode: 200;
  • 由于 SampleHttpServer 的代码较多,请直接查看sdk 中的源码。

4. 创建订阅

  • 创建订阅以告诉MNS Server,Topic里面的消息应该推送给谁
  • Sample里使用的是Http的Endpoint
  1. try
  2. {
  3. // 1. 生成SubscriptionAttributes,这里第二个参数是Subscription的Endpoint。请将"XXXX"改成实际的IP和Port
  4. // 1.1 这里设置的是刚才启动的http server的地址
  5. // 1.2 更多支持的Endpoint类型可以参考:help.aliyun.com/document_detail/27479.html
  6. SubscribeResponse res = topic.Subscribe(_subscriptionName, "http://XXXX");
  7. // 2. 订阅成功
  8. Console.WriteLine("Subscribe succeed");
  9. }
  10. catch (MNSException me)
  11. {
  12. // 3. 可能因为网络错误,或者同名的Subscription已存在等原因导致订阅出错,这里CatchException并做对应的处理
  13. Console.WriteLine("Subscribe Failed! ErrorCode: " + me.ErrorCode);
  14. }
  15. catch (Exception ex)
  16. {
  17. Console.WriteLine("Subscribe failed, exception info: " + ex.Message);
  18. }

5. 发布消息

  • 现在我们可以发布消息到Topic中,并且期待在HttpServer上收到对应的消息。
  1. try
  2. {
  3. // 1.1 如果是推送到邮箱,还需要生成PublishMessageRequest并设置MessageAttributes
  4. var response = topic.PublishMessage("message here </asdas\">");
  5. Console.WriteLine("PublishMessage succeed! " + response.MessageId);
  6. }
  7. catch (MNSException me)
  8. {
  9. // 3. 可能因为网络错误等原因导致PublishMessage失败,这里CatchException并做对应处理
  10. Console.WriteLine("PublishMessage Failed! ErrorCode: " + me.ErrorCode);
  11. }
  12. catch (Exception ex)
  13. {
  14. Console.WriteLine("PublishMessage failed, exception info: " + ex.Message);
  15. }

6. 查看 HttpEndpoint 接收消息

  • 第5步发布了一条消息到Topic中,MNS 会将发布的消息推送给第3步启动的 HttpEndpoint;
  • HttpEndpoint 在接收到消息推送请求后,会打印到console;

7. 取消订阅

  • 现在我们不需要再接收消息啦,可以告诉MNS Server取消订阅
  1. try
  2. {
  3. topic.Unsubscribe(_subscriptionName);
  4. Console.WriteLine("Unsubscribe succeed!");
  5. }
  6. catch (Exception ex)
  7. {
  8. Console.WriteLine("Subscribe failed, exception info: " + ex.Message);
  9. }

8. 删除主题

  • Sample中,我们最后删除了这个测试用的Topic
  1. try
  2. {
  3. client.DeleteTopic(_topicName);
  4. Console.WriteLine("Delete topic succeed");
  5. }
  6. catch (Exception ex)
  7. {
  8. Console.WriteLine("Delete topic failed, exception info: " + ex.Message);
  9. }
本文导读目录
本文导读目录
以上内容是否对您有帮助?