主题+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-阿里云