主題+QueueEndpoint使用手冊__Python SDK_SDK使用手冊_消息服務-阿裏雲
本文檔介紹如何使用python sdk中的sample代碼,完成創建主題、創建QueueEndpoint訂閱、創建隊列、發布消息、從隊列接收刪除消息和刪除主題操作。
1. 準備
- 下載最新版python sdk,解壓後進入mns_python_sdk子目錄;
- 打開sample.cfg文件,配置AccessKeyID、AccessKeySecret和Endpoint;
- AccessKeyId、AccessKeySecret
- 訪問阿裏雲API的密鑰對;
- 如果使用主賬號訪問,登陸阿裏雲 AccessKey 管理頁麵創建、查看;
- 如果使用子賬號訪問,請登錄阿裏雲訪問控製控製台查看;
- Endpoint
- 訪問MNS的接入地址,登陸MNS控製台 單擊右上角 獲取Endpoint 查看;
- 不同地域的接入地址不同;
- SecurityToken
- 阿裏雲訪問控製服務提供的短期訪問權限憑證,直接使用阿裏雲賬號或者子賬號訪問不需要配置該項,了解詳情;
- AccessKeyId、AccessKeySecret
- 進入sample目錄,後續使用的腳本都在這裏;
2. 創建主題
運行 createtopic.py 創建主題;
默認創建的主題名稱是 MySampleTopic,也可以通過參數指定主題名稱;
主題詳細信息請參考詳情;
- 運行
$python createtopic.py MyTopic1
Create Topic Succeed! TopicName:MyTopic1
- 核心代碼
endpoint,accid,acckey和token從第1步的配置文件中讀取;
#init my_account, my_topic
my_account = Account(endpoint, accid, acckey, token)
topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
my_topic = my_account.get_topic(topic_name)
#you can get more information of TopicMeta from mns/topic.py
topic_meta = TopicMeta()
try:
topic_url = my_topic.create(topic_meta)
print "Create Topic Succeed! TopicName:%sn" % topic_name
except MNSExceptionBase, e:
if e.type == "TopicAlreadyExist":
print "Topic already exist, please delete it before creating or use it directly."
sys.exit(0)
print "Create Topic Fail! Exception:%sn" % e
3. 創建隊列
運行 createqueue.py 創建隊列;
默認創建的隊列名稱是 MySampleQueue,也可以通過參數指定隊列名稱;
隊列詳細信息請參考詳情;
- 運行
$python createqueue.py MyQueue1
Create Queue Succeed! QueueName:MyQueue1
- 核心代碼
endpoint,accid,acckey和token從第1步的配置文件中讀取;
#init my_account, my_queue
my_account = Account(endpoint, accid, acckey, token)
queue_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleQueue"
my_queue = my_account.get_queue(queue_name)
#you can get more information of QueueMeta from mns/queue.py
queue_meta = QueueMeta()
try:
queue_url = my_queue.create(queue_meta)
print "Create Queue Succeed! QueueName:%sn" % queue_name
except MNSExceptionBase, e:
if e.type == "QueueAlreadyExist":
print "Queue already exist, please delete it before creating or use it directly."
sys.exit(0)
print "Create Queue Fail! Exception:%sn" % e
4. 創建訂閱
運行 subscribe.py 創建訂閱;
第一個參數指定隊列的地域,必須與主題在同一個地域,此處以杭州為例;
第二個參數指定隊列的名稱,使用第3步創建的隊列名稱;
第三個參數指定訂閱的主題名稱,如果第2步中指定了主題名稱,這裏同樣指定主題名稱;
第四個參數指定訂閱的名稱,默認是 MySampleTopic-Sub;
訂閱詳細信息請參考詳情;
- 運行
$python subscribe_queueendpoint.py cn-hangzhou MyQueue1 MyTopic1 MyTopic1-Sub1
Create Subscription Succeed! TopicName:MyTopic1 SubName:MyTopic1-Sub1 Endpoint:acs:mns:cn-hangzhou:127797386164059:queues/MyQueue1
- 核心代碼
endpoint,accid,acckey和token從第1步的配置文件中讀取;
region = sys.argv[1]
queue_name = sys.argv[2]
queue_endpoint = TopicHelper.generate_queue_endpoint(region, account_id, queue_name)
#init my_account, my_topic, my_sub
my_account = Account(endpoint, accid, acckey, token)
topic_name = sys.argv[3] if len(sys.argv) > 3 else "MySampleTopic"
my_topic = my_account.get_topic(topic_name)
sub_name = sys.argv[4] if len(sys.argv) > 4 else "MySampleTopic-Sub"
my_sub = my_topic.get_subscription(sub_name)
#you can get more information of SubscriptionMeta from mns/subscription.py
sub_meta = SubscriptionMeta(queue_endpoint, notify_content_format = SubscriptionNotifyContentFormat.SIMPLIFIED)
try:
topic_url = my_sub.subscribe(sub_meta)
print "Create Subscription Succeed! TopicName:%s SubName:%s Endpoint:%sn" % (topic_name, sub_name, queue_endpoint)
except MNSExceptionBase, e:
if e.type == "TopicNotExist":
print "Topic not exist, please create topic."
sys.exit(0)
elif e.type == "SubscriptionAlreadyExist":
print "Subscription already exist, please unsubscribe or use it directly."
sys.exit(0)
print "Create Subscription Fail! Exception:%sn" % e
5. 發布消息
運行publishmessage.py 發布多條消息到主題中;
如果第2步中指定了主題名稱,這裏同樣通過第一個參數指定主題名稱;
消息詳細信息請參考詳情;
- 運行
$python publishmessage.py MyTopic1
==========Publish Message To Topic==========
TopicName:MyTopic1
MessageCount:3
Publish Message Succeed. MessageBody:I am test message 0. MessageID:F6EA56633844DBFC-1-154BDFB8059-200000004
Publish Message Succeed. MessageBody:I am test message 1. MessageID:F6EA56633844DBFC-1-154BDFB805F-200000005
Publish Message Succeed. MessageBody:I am test message 2. MessageID:F6EA56633844DBFC-1-154BDFB8062-200000006
- 核心代碼
endpoint,accid,acckey和token從第1步的配置文件中讀取;
#init my_account, my_topic
my_account = Account(endpoint, accid, acckey, token)
topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
my_topic = my_account.get_topic(topic_name)
#publish some messages
msg_count = 3
print "%sPublish Message To Topic%snTopicName:%snMessageCount:%sn" % (10*"=", 10*"=", topic_name, msg_count)
for i in range(msg_count):
try:
msg_body = "I am test message %s." % i
msg = TopicMessage(msg_body)
re_msg = my_topic.publish_message(msg)
print "Publish Message Succeed. MessageBody:%s MessageID:%s" % (msg_body, re_msg.message_id)
except MNSExceptionBase,e:
if e.type == "TopicNotExist":
print "Topic not exist, please create it."
sys.exit(1)
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秒;
消息詳細信息請參考詳情;
$python recvdelmessage.py MyQueue1 false
==========Receive And Delete Message From Queue==========
QueueName:MyQueue1
WaitSeconds:3
Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTEtOA== MessageBody:I am test message 0. MessageID:E56AE055BAA638AC-1-1570CE43AD3-200000001
Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTEtOA==
Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5NC0xNDczMzkwMjkyLTEtOA== MessageBody:I am test message 1. MessageID:E56AE055BAA638AC-1-1570CE43AE0-200000002
Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5NC0xNDczMzkwMjkyLTEtOA==
Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTItOA== MessageBody:I am test message 2. MessageID:CDAC88D223C0F9E3-2-1570CE43B2E-200000001
Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDczMzkwMjkyLTItOA==
Queue is empty!
7. 刪除主題
運行deletetopic.py 刪除主題;
如果第2步中指定了主題名稱,這裏同樣通過第一個參數指定主題名稱;
- 運行
$python deletetopic.py MyTopic1
Delete Topic Succeed! TopicName:MyTopic1
- 核心代碼
#init my_account, my_topic
my_account = Account(endpoint, accid, acckey, token)
topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
my_topic = my_account.get_topic(topic_name)
try:
my_topic.delete()
print "Delete Topic Succeed! TopicName:%sn" % topic_name
except MNSExceptionBase, e:
print "Delete Topic Fail! Exception:%sn" % e
8. 刪除隊列
運行deletequeue.py 刪除隊列
- 運行
$python deletequeue.py MyQueue1
Delete Queue Succeed! QueueName:MyQueue1
- 核心代碼
endpoint,accid,acckey和token從第1步的配置文件中讀取;
#init my_account, my_queue
my_account = Account(endpoint, accid, acckey, token)
queue_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleQueue"
my_queue = my_account.get_queue(queue_name)
#delete queue
try:
my_queue.delete()
print "Delete Queue Succeed! QueueName:%sn" % queue_name
except MNSExceptionBase, e:
print "Delete Queue Fail! Exception:%sn" % e
最後更新:2016-11-23 16:04:18
上一篇:
主題+HttpEndpoint使用手冊__Python SDK_SDK使用手冊_消息服務-阿裏雲
下一篇:
HttpEndpoint 示例代碼__Python SDK_SDK使用手冊_消息服務-阿裏雲
可授權CDN Action__RAM資源授權-CDN_API 手冊_CDN-阿裏雲
OSS 參考使用說明__開發準備_開發人員指南_E-MapReduce-阿裏雲
按量付費計費規則說明__ECS購買須知_產品使用問題_雲服務器 ECS-阿裏雲
運行離線任務__應用管理_用戶指南_容器服務-阿裏雲
ECS雲服務器磁盤FAQ
PutSymlink__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
使用表格存儲的 API__開發指南_表格存儲-阿裏雲
如何上傳網站程序__網站上傳/下載_使用指南_雲虛機主機-阿裏雲
續費流程__購買指南_E-MapReduce-阿裏雲
邊界路由器__產品使用手冊_高速通道-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲