閱讀486 返回首頁    go 阿裏雲 go 技術社區[雲棲]


主題+QueueEndpoint使用手冊__Python SDK_SDK使用手冊_消息服務-阿裏雲

本文檔介紹如何使用python sdk中的sample代碼,完成創建主題、創建QueueEndpoint訂閱、創建隊列、發布消息、從隊列接收刪除消息和刪除主題操作。

1. 準備

  • 下載最新版python sdk,解壓後進入mns_python_sdk子目錄;
  • 打開sample.cfg文件,配置AccessKeyID、AccessKeySecret和Endpoint;
    • AccessKeyId、AccessKeySecret
    • Endpoint
      • 訪問MNS的接入地址,登陸MNS控製台 單擊右上角 獲取Endpoint 查看;
      • 不同地域的接入地址不同;
    • SecurityToken
      • 阿裏雲訪問控製服務提供的短期訪問權限憑證,直接使用阿裏雲賬號或者子賬號訪問不需要配置該項,了解詳情;
  • 進入sample目錄,後續使用的腳本都在這裏;

2. 創建主題

運行 createtopic.py 創建主題;
默認創建的主題名稱是 MySampleTopic,也可以通過參數指定主題名稱;
主題詳細信息請參考詳情;

  • 運行
  1. $python createtopic.py MyTopic1
  2. Create Topic Succeed! TopicName:MyTopic1
  • 核心代碼

endpoint,accid,acckey和token從第1步的配置文件中讀取;

  1. #init my_account, my_topic
  2. my_account = Account(endpoint, accid, acckey, token)
  3. topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
  4. my_topic = my_account.get_topic(topic_name)
  5. #you can get more information of TopicMeta from mns/topic.py
  6. topic_meta = TopicMeta()
  7. try:
  8. topic_url = my_topic.create(topic_meta)
  9. print "Create Topic Succeed! TopicName:%sn" % topic_name
  10. except MNSExceptionBase, e:
  11. if e.type == "TopicAlreadyExist":
  12. print "Topic already exist, please delete it before creating or use it directly."
  13. sys.exit(0)
  14. print "Create Topic Fail! Exception:%sn" % e

3. 創建隊列

運行 createqueue.py 創建隊列;
默認創建的隊列名稱是 MySampleQueue,也可以通過參數指定隊列名稱;
隊列詳細信息請參考詳情;

  • 運行
  1. $python createqueue.py MyQueue1
  2. Create Queue Succeed! QueueName:MyQueue1
  • 核心代碼

endpoint,accid,acckey和token從第1步的配置文件中讀取;

  1. #init my_account, my_queue
  2. my_account = Account(endpoint, accid, acckey, token)
  3. queue_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleQueue"
  4. my_queue = my_account.get_queue(queue_name)
  5. #you can get more information of QueueMeta from mns/queue.py
  6. queue_meta = QueueMeta()
  7. try:
  8. queue_url = my_queue.create(queue_meta)
  9. print "Create Queue Succeed! QueueName:%sn" % queue_name
  10. except MNSExceptionBase, e:
  11. if e.type == "QueueAlreadyExist":
  12. print "Queue already exist, please delete it before creating or use it directly."
  13. sys.exit(0)
  14. print "Create Queue Fail! Exception:%sn" % e

4. 創建訂閱

運行 subscribe.py 創建訂閱;
第一個參數指定隊列的地域,必須與主題在同一個地域,此處以杭州為例;
第二個參數指定隊列的名稱,使用第3步創建的隊列名稱;
第三個參數指定訂閱的主題名稱,如果第2步中指定了主題名稱,這裏同樣指定主題名稱;
第四個參數指定訂閱的名稱,默認是 MySampleTopic-Sub;
訂閱詳細信息請參考詳情;

  • 運行
  1. $python subscribe_queueendpoint.py cn-hangzhou MyQueue1 MyTopic1 MyTopic1-Sub1
  2. Create Subscription Succeed! TopicName:MyTopic1 SubName:MyTopic1-Sub1 Endpoint:acs:mns:cn-hangzhou:127797386164059:queues/MyQueue1
  • 核心代碼

endpoint,accid,acckey和token從第1步的配置文件中讀取;

  1. region = sys.argv[1]
  2. queue_name = sys.argv[2]
  3. queue_endpoint = TopicHelper.generate_queue_endpoint(region, account_id, queue_name)
  4. #init my_account, my_topic, my_sub
  5. my_account = Account(endpoint, accid, acckey, token)
  6. topic_name = sys.argv[3] if len(sys.argv) > 3 else "MySampleTopic"
  7. my_topic = my_account.get_topic(topic_name)
  8. sub_name = sys.argv[4] if len(sys.argv) > 4 else "MySampleTopic-Sub"
  9. my_sub = my_topic.get_subscription(sub_name)
  10. #you can get more information of SubscriptionMeta from mns/subscription.py
  11. sub_meta = SubscriptionMeta(queue_endpoint, notify_content_format = SubscriptionNotifyContentFormat.SIMPLIFIED)
  12. try:
  13. topic_url = my_sub.subscribe(sub_meta)
  14. print "Create Subscription Succeed! TopicName:%s SubName:%s Endpoint:%sn" % (topic_name, sub_name, queue_endpoint)
  15. except MNSExceptionBase, e:
  16. if e.type == "TopicNotExist":
  17. print "Topic not exist, please create topic."
  18. sys.exit(0)
  19. elif e.type == "SubscriptionAlreadyExist":
  20. print "Subscription already exist, please unsubscribe or use it directly."
  21. sys.exit(0)
  22. print "Create Subscription Fail! Exception:%sn" % e

5. 發布消息

運行publishmessage.py 發布多條消息到主題中;
如果第2步中指定了主題名稱,這裏同樣通過第一個參數指定主題名稱;
消息詳細信息請參考詳情;

  • 運行
  1. $python publishmessage.py MyTopic1
  2. ==========Publish Message To Topic==========
  3. TopicName:MyTopic1
  4. MessageCount:3
  5. Publish Message Succeed. MessageBody:I am test message 0. MessageID:F6EA56633844DBFC-1-154BDFB8059-200000004
  6. Publish Message Succeed. MessageBody:I am test message 1. MessageID:F6EA56633844DBFC-1-154BDFB805F-200000005
  7. Publish Message Succeed. MessageBody:I am test message 2. MessageID:F6EA56633844DBFC-1-154BDFB8062-200000006
  • 核心代碼

endpoint,accid,acckey和token從第1步的配置文件中讀取;

  1. #init my_account, my_topic
  2. my_account = Account(endpoint, accid, acckey, token)
  3. topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
  4. my_topic = my_account.get_topic(topic_name)
  5. #publish some messages
  6. msg_count = 3
  7. print "%sPublish Message To Topic%snTopicName:%snMessageCount:%sn" % (10*"=", 10*"=", topic_name, msg_count)
  8. for i in range(msg_count):
  9. try:
  10. msg_body = "I am test message %s." % i
  11. msg = TopicMessage(msg_body)
  12. re_msg = my_topic.publish_message(msg)
  13. print "Publish Message Succeed. MessageBody:%s MessageID:%s" % (msg_body, re_msg.message_id)
  14. except MNSExceptionBase,e:
  15. if e.type == "TopicNotExist":
  16. print "Topic not exist, please create it."
  17. sys.exit(1)
  18. print "Publish Message Fail. Exception:%s" % e

6. 從隊列獲取和刪除消息

第5步發布了多條消息到主題中,MNS 會將發布的消息推送給第4步指定的隊列中;
運行recvdelmessage.py,接收並刪除隊列中的消息,直到隊列為空;
第一個參數指定隊列的名稱,使用第4步指定的隊列名;
第二個參數指定消息體不做base64解碼,因為publish message時未編碼;
程序中receive message使用long polling方式,指定 wait seconds為3秒,因此當隊列為空時,程序會等待3秒;
消息詳細信息請參考詳情;

  1. $python recvdelmessage.py MyQueue1 false
  2. ==========Receive And Delete Message From Queue==========
  3. QueueName:MyQueue1
  4. WaitSeconds:3
  5. Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTEtOA== MessageBody:I am test message 0. MessageID:E56AE055BAA638AC-1-1570CE43AD3-200000001
  6. Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTEtOA==
  7. Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5NC0xNDczMzkwMjkyLTEtOA== MessageBody:I am test message 1. MessageID:E56AE055BAA638AC-1-1570CE43AE0-200000002
  8. Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5NC0xNDczMzkwMjkyLTEtOA==
  9. Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTItOA== MessageBody:I am test message 2. MessageID:CDAC88D223C0F9E3-2-1570CE43B2E-200000001
  10. Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTItOA==
  11. Queue is empty!

7. 刪除主題

運行deletetopic.py 刪除主題;
如果第2步中指定了主題名稱,這裏同樣通過第一個參數指定主題名稱;

  • 運行
  1. $python deletetopic.py MyTopic1
  2. Delete Topic Succeed! TopicName:MyTopic1
  • 核心代碼
  1. #init my_account, my_topic
  2. my_account = Account(endpoint, accid, acckey, token)
  3. topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
  4. my_topic = my_account.get_topic(topic_name)
  5. try:
  6. my_topic.delete()
  7. print "Delete Topic Succeed! TopicName:%sn" % topic_name
  8. except MNSExceptionBase, e:
  9. print "Delete Topic Fail! Exception:%sn" % e

8. 刪除隊列

運行deletequeue.py 刪除隊列

  • 運行
  1. $python deletequeue.py MyQueue1
  2. Delete Queue Succeed! QueueName:MyQueue1
  • 核心代碼

endpoint,accid,acckey和token從第1步的配置文件中讀取;

  1. #init my_account, my_queue
  2. my_account = Account(endpoint, accid, acckey, token)
  3. queue_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleQueue"
  4. my_queue = my_account.get_queue(queue_name)
  5. #delete queue
  6. try:
  7. my_queue.delete()
  8. print "Delete Queue Succeed! QueueName:%sn" % queue_name
  9. except MNSExceptionBase, e:
  10. print "Delete Queue Fail! Exception:%sn" % e

最後更新:2016-11-23 16:04:18

  上一篇:go 主題+HttpEndpoint使用手冊__Python SDK_SDK使用手冊_消息服務-阿裏雲
  下一篇:go HttpEndpoint 示例代碼__Python SDK_SDK使用手冊_消息服務-阿裏雲