消息sdk下载

sdk下载  时间:2021-05-05  阅读:()
消息服务SDK使用手册1.
2.
3.
1.
2.
3.
4.
SDK使用手册JavaSDKMNSJavaSDK建议下载最新发布的SDK版本以获得最佳性能和稳定性.
Version1.
1.
5更新日期2016-05-26sdk下载sample下载更新内容增加事务消息队列TransactionQueue;增加一对多广播消息功能;新增Javasdk性能测试示例代码;使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
1.
5.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行QueueSample.
java,TopicSample.
java,CloudPullTopicDemo.
java(广播消息示例代码),TransactionMessageDemo.
java(事务队列完全封装版使用示例),TransactionMessageDemo2.
java(事务队列用户自定义版示例,需要用户自定义本地事务mns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecret消息服务/SDK使用手册11.
2.
3.
1.
2.
3.
4.
1.
2.
1.
2.
3.
,做failover处理)Version1.
1.
4更新日期2016-04-25sdk下载sample下载更新内容Subscription支持Queue/MailEndpointTopic支持消息过滤BugFix:修复长轮询请求数超过单路由(maxConnectionsPerRoute)最大链接数导致请求超时使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
1.
4.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行QueueSample.
java和TopicSample.
java文件Version1.
1.
3更新日期2016-03-28sdk下载sample下载更新内容支持HTTPS去除Message对象中priority,dequeueCount,delaySeconds的默认初始化值使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
1.
3.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:mns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecret消息服务/SDK使用手册24.
1.
1.
2.
3.
4.
1.
1.
2.
运行QueueSample.
java和TopicSample.
java文件Version1.
1.
2更新日期2016-01-30sdk下载sample下载更新内容fixbug:popMessage接口无参数情况下waitseconds取QueueMeta中设置的值,而非0使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
1.
2.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行QueueSample.
java和TopicSample.
java文件Version1.
1.
1更新日期2016-01-19sdk下载sample下载更新内容fixbug:中文消息使用UTF-8编码,而非平台默认字符集使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
1.
1.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;mns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecretmns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecret消息服务/SDK使用手册33.
4.
1.
2.
3.
1.
2.
3.
4.
1.
在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行QueueSample.
java和TopicSample.
java文件Version1.
1.
0更新日期2016-01-06sdk下载sample下载更新内容添加对于Topic功能的支持添加对于STSToken的支持消息Base64编码支持可选使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
1.
0.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行QueueSample.
java和TopicSample.
java文件Version1.
0.
5更新日期2015-12-02sdk下载sample下载更新内容修复bug:多CloudAccount对象时导致内存泄漏mns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecretmns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecret消息服务/SDK使用手册42.
1.
2.
3.
4.
1.
2.
1.
2.
3.
4.
依赖的httpasyncclient版本升至4.
1使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
0.
5.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行Sample.
java文件Version1.
0.
4更新日期2015-11-05sdk下载sample下载更新内容修复bug:网络异常时极端情况下线程挂起修复bug:关闭空闲连接回收常驻线程使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
0.
4.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行Sample.
java文件Version1.
0.
3更新日期2015-06-09sdk下载sample下载mns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecretmns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecret消息服务/SDK使用手册51.
2.
3.
4.
1.
2.
3.
4.
1.
1.
更新内容修复bug:大量closewait的连接导致SDK挂起;增加samplecode;API协议升级:"x-mns-version"="2015-06-06";支持BatchSendMessage、BatchReceiveMessage、BatchPeekMessage、BatchDeleteMessage;使用帮助下载sample并解压aliyun-sdk-mns-samples-1.
0.
3.
zip;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录("/home/YOURNAME/"inLinuxor"C:\Users\YOURNAME"inWindows)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:运行Sample.
java文件Version1.
0.
2更新日期2015-03-03下载更新内容优化XML解析逻辑,提升性能Version1.
0.
1更新日期2014-12-19下载更新内容缺省线程池修正为50,修复大规模并发同步时SDK端的性能瓶颈Version1.
0.
0更新日期mns.
accountendpoint=http://$accountid.
mns.
cn-hangzhou.
aliyuncs.
commns.
accesskeyid=$your_accesskeyidmns.
accesskeysecret=$your_accesskeysecret消息服务/SDK使用手册6---qqqqqqq2014-08-01下载队列使用手册本文档介绍如何使用javasdk中的sample代码,完成创建队列、发送消息、接收删除消息和删除队列操作.
1.
准备下载最新版javasdk,解压到aliyun-sdk-mns-samples文件夹;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录(Linux系统为"/home/YOURNAME/"目录或者Windows系统为"C:\Users\YOURNAME"目录)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:AccessKeyId、AccessKeySecret访问阿里云API的密钥对;如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同,分为公网以及内网域名;2.
创建队列下面给出了创建队列的代码段(队列详细信息请参考详情);publicclassCreateQueueDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全StringqueueName="TestQueue";QueueMetameta=newQueueMeta();//生成本地QueueMeta属性,有关队列属性详细介绍见https://help.
aliyun.
com/document_detail/27476.
htmlmeta.
setQueueName(queueName);//设置队列名meta.
setPollingWaitSeconds(15);meta.
setMaxMessageSize(2048L);try{CloudQueuequeue=client.
createQueue(meta);}catch(ClientExceptionce){System.
out.
println("SomethingwrongwiththenetworkconnectionbetweenclientandMNSservice.
"+"PleasecheckyournetworkandDNSavailablity.
");ce.
printStackTrace();}catch(ServiceExceptionex)消息服务/SDK使用手册73.
发送消息创建完队列之后,就可以向队列发送消息{if(se.
getErrorCode().
equals("QueueNotExist")){System.
out.
println("Queueisnotexist.
Pleasecreatebeforeuse");}elseif(se.
getErrorCode().
equals("TimeExpired")){System.
out.
println("Therequestistimeexpired.
Pleasecheckyourlocalmachinetimeclock");}se.
printStackTrace();}catch(Exceptione){System.
out.
println("Unknownexceptionhappened!
");e.
printStackTrace();}client.
close();//程序退出时,需主动调用client的close方法进行资源释放}}publicclassProducerDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全try{CloudQueuequeue=client.
getQueueRef("TestQueue");Messagemessage=newMessage();message.
setMessageBody("Iamtestmessage");MessageputMsg=queue.
putMessage(message);System.
out.
println("Sendmessageidis:"+putMsg.
getMessageId());}catch(ClientExceptionce){System.
out.
println("SomethingwrongwiththenetworkconnectionbetweenclientandMNSservice.
"+"PleasecheckyournetworkandDNSavailablity.
");ce.
printStackTrace();}catch(ServiceExceptionex){if(se.
getErrorCode().
equals("QueueNotExist")){System.
out.
println("Queueisnotexist.
Pleasecreatebeforeuse");}elseif(se.
getErrorCode().
equals("TimeExpired")){System.
out.
println("Therequestistimeexpired.
Pleasecheckyourlocalmachinetimeclock");}se.
printStackTrace();}catch(Exceptione){System.
out.
println("Unknownexceptionhappened!
");e.
printStackTrace();}消息服务/SDK使用手册84.
接收和删除消息队列中已经发送了1条消息,下面是从队列中取出并删除该条消息.
client.
close();//程序退出时,需主动调用client的close方法进行资源释放}}publicclassConsumerDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全try{CloudQueuequeue=client.
getQueueRef("TestQueue");MessagepopMsg=queue.
popMessage();if(popMsg!
=null){System.
out.
println("messagehandle:"+popMsg.
getReceiptHandle());System.
out.
println("messagebody:"+popMsg.
getMessageBodyAsString());System.
out.
println("messageid:"+popMsg.
getMessageId());System.
out.
println("messagedequeuecount:"+popMsg.
getDequeueCount());//删除已经取出消费的消息queue.
deleteMessage(popMsg.
getReceiptHandle());System.
out.
println("deletemessagesuccessfully.
\n");}else{System.
out.
println("messagenotexistinTestQueue.
\n");}}catch(ClientExceptionce){System.
out.
println("SomethingwrongwiththenetworkconnectionbetweenclientandMNSservice.
"+"PleasecheckyournetworkandDNSavailablity.
");ce.
printStackTrace();}catch(ServiceExceptionse){if(se.
getErrorCode().
equals("QueueNotExist")){System.
out.
println("Queueisnotexist.
Pleasecreatequeuebeforeuse");}elseif(se.
getErrorCode().
equals("TimeExpired")){System.
out.
println("Therequestistimeexpired.
Pleasecheckyourlocalmachinetimeclock");}se.
printStackTrace();}catch(Exceptione){System.
out.
println("Unknownexceptionhappened!
");e.
printStackTrace();}client.
close();}消息服务/SDK使用手册9---qq5.
删除队列主题使用手册本文档介绍如何使用javasdk中的sample代码,完成创建主题、创建订阅,发布消息、接收消息以及删除主题等操作.
1.
准备下载最新版javasdk,解压到aliyun-sdk-mns-samples文件夹;用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;在用户目录(Linux系统为"/home/YOURNAME/"目录或者Windows系统为"C:\Users\YOURNAME"目录)中创建.
aliyun-mns.
properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:AccessKeyId、AccessKeySecret访问阿里云API的密钥对;}publicclassDeleteQueueDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全try{CloudQueuequeue=client.
getQueueRef("TestQueue");queue.
delete();}catch(ClientExceptionce){System.
out.
println("SomethingwrongwiththenetworkconnectionbetweenclientandMNSservice.
"+"PleasecheckyournetworkandDNSavailablity.
");ce.
printStackTrace();}catch(ServiceExceptionse){se.
printStackTrace();}catch(Exceptione){System.
out.
println("Unknownexceptionhappened!
");e.
printStackTrace();}client.
close();}}消息服务/SDK使用手册10qqqqq如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同,分为公网以及内网域名;2.
创建主题下面给出了创建主题的代码示例,有关主题详细信息请参考详情;3.
启动HttpEndpointaliyun-sdk-mns-samples中有一个HttpEndpoint.
java类,简单实现了一个本地启动的Http消息接收端,主要功能包括:HttpEndpoint的具体实现源码可参考sdk中源码;4.
创建订阅对已经创建好的主题Topic进行订阅,在订阅时需要设置对应的推送Endpoint地址(目前支持HTTP、邮件以及队列)、错误重试策略、推送消息格式等;publicclassCreateTopicDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全StringtopicName="TestTopic";TopicMetameta=newTopicMeta();meta.
setTopicName(topicName);try{CloudTopictopic=client.
createTopic(meta);}catch(Exceptione)e.
printStackTrace();System.
out.
println("createtopicerror,"+e.
getMessage());}client.
close();}}对MNS推送消息请求做签名验证;解析推送请求的消息body体;返回相应的处理返回码:200;publicclassSubscribeDemo{消息服务/SDK使用手册115.
发布消息在创建好主题以及订阅之后,并且已经启动了HttpEndpoint,我们可以向Topic发布消息.
6.
查看HttpEndpoint接收消息第5步发布了一条消息到Topic中,MNS会将该消息推送到所有的订阅Endpoint,本例中的HttpEndpoint会将接收到的消息打印出来.
publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全CloudTopictopic=client.
getTopicRef("TestTopic");try{SubscriptionMetasubMeta=newSubscriptionMeta();subMeta.
setSubscriptionName("TestSub");subMeta.
setEndpoint(HttpEndpoint.
GenEndpointLocal());subMeta.
setNotifyContentFormat(SubscriptionMeta.
NotifyContentFormat.
XML);StringsubUrl=topic.
subscribe(subMeta);System.
out.
println("subscriptionurl:"+subUrl);}catch(Exceptione){e.
printStackTrace();System.
out.
println("subscribe/unsubribeerror");}client.
close();}}publicclassPublishMessageDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全CloudTopictopic=client.
getTopicRef("TestTopic");try{TopicMessagemsg=newBase64TopicMessage();//可以使用TopicMessage结构,选择不进行Base64加密msg.
setMessageBody("helloworld!
");msg=topic.
publishMessage(msg);System.
out.
println(msg.
getMessageId());System.
out.
println(msg.
getMessageBodyMD5());}catch(Exceptione){e.
printStackTrace();System.
out.
println("subscribeerror");}client.
close();}}消息服务/SDK使用手册127.
取消订阅如果不需要接收主题的消息,则可以选择取消订阅.
8.
删除主题最后选择将Topic删除.
发送消息publicclassUnsubscribeDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全CloudTopictopic=client.
getTopicRef("TestTopic");try{topic.
unsubscribe("TestSub");}catch(Exceptione){e.
printStackTrace();System.
out.
println("unsubribeerror");}client.
close();}}publicclassDeleteTopicDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");MNSClientclient=account.
getMNSClient();//在程序中,CloudAccount以及MNSClient单例实现即可,多线程安全CloudTopictopic=client.
getTopicRef("TestTopic");try{topic.
delete();}catch(Exceptione){e.
printStackTrace();System.
out.
println("deletetopicerror");}client.
close();}}publicclassProducerDemo{publicstaticvoidmain(String[]args){CloudAccountaccount=newCloudAccount("YourAccessId","YourAccessKey","MNSEndpoint");消息服务/SDK使用手册13消费消息//这个client仅初始化一次MNSClientclient=account.
getMNSClient();//循环发送10条消息try{//TestQueue是你的测试队列,请提前创建CloudQueuequeue=client.
getQueueRef("TestQueue");for(inti=0;ithreads=newArrayList();for(inti=0;i=endTime){break;}}System.
out.
println(System.
currentTimeMillis());System.
out.
println("Thread"+Thread.
currentThread().
getName(String.
valueOf(count));totalCount.
addAndGet(count);}catch(Exceptione){e.
printStackTrace();}}},String.
valueOf(i));thread.
start();threads.
add(thread);}for(inti=0;i=endTime){break;}}System.
out.
println("Thread"+Thread.
currentThread().
getName(String.
valueOf(count));totalCount.
addAndGet(count);}catch(Exceptione){e.
printStackTrace();}}},String.
valueOf(i));thread.
start();threads.
add(thread);}for(inti=0;isdk下载更新内容Topic推送支持消息过滤增加sample目录,包含更详细的示例代码使用帮助下载sdk并解压;进入mns_python_sdk目录,根据README文档安装、使用SDK;Version1.
1.
1更新日期2016-03-28sdk下载更新内容支持HTTPS支持Logging使用帮助下载sdk并解压;进入mns_python_sdk目录,根据README文档安装、使用SDK;Version1.
1.
0消息服务/SDK使用手册201.
2.
1.
2.
1.
2.
3.
4.
1.
2.
1.
2.
更新日期2016-01-05sdk下载更新内容添加对于Topic功能的支持添加对于STSToken的支持使用帮助下载sdk并解压;进入mns_python_sdk目录,根据README文档安装、使用SDK;Version1.
0.
2更新日期2015-06-09下载更新内容支持SDK安装;提供mnscmd命令;API协议升级:"x-mns-version"="2015-06-06";支持BatchSendMessage、BatchReceiveMessage、BatchPeekMessage、BatchDeleteMessage;使用帮助下载sdk并解压;进入mns_python_sdk目录,根据README文档安装、使用SDK;Version1.
0.
1更新日期2015-02-03下载更新内容统一队列非字符串属性为int类型;修正SetQueueAttribute的返回status为204;消息服务/SDK使用手册21--qqqqqqqqq---Version1.
0.
0更新日期2014-08-01下载队列使用手册本文档介绍如何使用pythonsdk中的sample代码,完成创建队列、发送消息、接收删除消息和删除队列操作.
1.
准备下载最新版pythonsdk,解压后进入mns_python_sdk子目录;打开sample.
cfg文件,配置AccessKeyID、AccessKeySecret和Endpoint;AccessKeyId、AccessKeySecret访问阿里云API的密钥对;如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同;SecurityToken阿里云访问控制服务提供的短期访问权限凭证,直接使用阿里云账号或者子账号访问不需要配置该项,了解详情;进入sample目录,后续使用的脚本都在这里;2.
创建队列运行createqueue.
py创建队列;默认创建的队列名称是MySampleQueue,也可以通过参数指定队列名称;队列详细信息请参考详情;运行核心代码endpoint,accid,acckey和token从第1步的配置文件中读取;$pythoncreatequeue.
pyMyQueue1CreateQueueSucceed!
QueueName:MyQueue1消息服务/SDK使用手册22--3.
发送消息运行sendmessage.
py,发送多条消息到队列中;如果第2步指定了队列名称,这里同样通过参数指定队列名称;消息详细信息请参考详情;运行核心代码endpoint,accid,acckey和token从第1步的配置文件中读取;#initmy_account,my_queuemy_account=Account(endpoint,accid,acckey,token)queue_name=sys.
argv[1]iflen(sys.
argv)>1else"MySampleQueue"my_queue=my_account.
get_queue(queue_name)#youcangetmoreinformationofQueueMetafrommns/queue.
pyqueue_meta=QueueMeta()try:queue_url=my_queue.
create(queue_meta)print"CreateQueueSucceed!
QueueName:%s\n"%queue_nameexceptMNSExceptionBase,e:ife.
type=="QueueAlreadyExist":print"Queuealreadyexist,pleasedeleteitbeforecreatingoruseitdirectly.
"sys.
exit(0)print"CreateQueueFail!
Exception:%s\n"%e$pythonsendmessage.
pyMyQueue1SendMessageToQueue=QueueName:MyQueue1MessageCount:3SendMessageSucceed!
MessageBody:Iamtestmessage0.
MessageID:3EBE662B52BC99BC-1-154BD99CCA7-200000001SendMessageSucceed!
MessageBody:Iamtestmessage1.
MessageID:64B92941FC57837F-2-154BD99CCCE-200000001SendMessageSucceed!
MessageBody:Iamtestmessage2.
MessageID:3EBE662B52BC99BC-1-154BD99CCF0-200000002#initmy_account,my_queuemy_account=Account(endpoint,accid,acckey,token)queue_name=sys.
argv[1]iflen(sys.
argv)>1else"MySampleQueue"my_queue=my_account.
get_queue(queue_name)#sendsomemessagesmsg_count=3print"%sSendMessageToQueue%s\nQueueName:%s\nMessageCount:%s\n"%(10*"=",10*"=",queue_name,msg_count)foriinrange(msg_count):消息服务/SDK使用手册23--4.
接收和删除消息运行recvdelmessage.
py,接收并删除队列中的消息,直到队列为空;如果第2步指定了队列名称,这里同样通过参数指定队列名称;程序中receivemessage使用longpolling方式,指定waitseconds为3秒,因此当队列为空时,程序会等待3秒;消息详细信息请参考详情;运行核心代码endpoint,accid,acckey和token从第1步的配置文件中读取;try:msg_body="Iamtestmessage%s.
"%imsg=Message(msg_body)re_msg=my_queue.
send_message(msg)print"SendMessageSucceed!
MessageBody:%sMessageID:%s"%(msg_body,re_msg.
message_id)exceptMNSExceptionBase,e:ife.
type=="QueueNotExist":print"Queuenotexist,pleasecreatequeuebeforesendmessage.
"sys.
exit(0)print"SendMessageFail!
Exception:%s\n"%e$pythonrecvdelmessage.
pyMyQueue1ReceiveAndDeleteMessageFromQueue=QueueName:MyQueue1WaitSeconds:3ReceiveMessageSucceed!
ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTEtOA==MessageBody:Iamtestmessage0.
MessageID:3EBE662B52BC99BC-1-154BD99CCA7-200000001DeleteMessageSucceed!
ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTEtOA==ReceiveMessageSucceed!
ReceiptHandle:1-ODU4OTkzNDU5NC0xNDYzNDcwNDU4LTEtOA==MessageBody:Iamtestmessage2.
MessageID:3EBE662B52BC99BC-1-154BD99CCF0-200000002DeleteMessageSucceed!
ReceiptHandle:1-ODU4OTkzNDU5NC0xNDYzNDcwNDU4LTEtOA==ReceiveMessageSucceed!
ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTItOA==MessageBody:Iamtestmessage1.
MessageID:64B92941FC57837F-2-154BD99CCCE-200000001DeleteMessageSucceed!
ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTItOA==Queueisempty!
#initmy_account,my_queuemy_account=Account(endpoint,accid,acckey,token)queue_name=sys.
argv[1]iflen(sys.
argv)>1else"MySampleQueue"my_queue=my_account.
get_queue(queue_name)#receiveanddeletemessagefromqueueutilthequeueisempty#setthelongpollingwaittime3seoncdsbywait_secondswait_seconds=3消息服务/SDK使用手册24--5.
删除队列运行deletequeue.
py删除队列运行核心代码endpoint,accid,acckey和token从第1步的配置文件中读取;print"%sReceiveAndDeleteMessageFromQueue%s\nQueueName:%s\nWaitSeconds:%s\n"%(10*"=",10*"=",queue_name,wait_seconds)whileTrue:#receivemessagetry:recv_msg=my_queue.
receive_message(wait_seconds)print"ReceiveMessageSucceed!
ReceiptHandle:%sMessageBody:%sMessageID:%s"%(recv_msg.
receipt_handle,recv_msg.
message_body,recv_msg.
message_id)exceptMNSExceptionBase,e:ife.
type=="QueueNotExist":print"Queuenotexist,pleasecreatequeuebeforereceivemessage.
"sys.
exit(0)elife.
type=="MessageNotExist":print"Queueisempty!
"sys.
exit(0)print"ReceiveMessageFail!
Exception:%s\n"%econtinue#deletemessagetry:my_queue.
delete_message(recv_msg.
receipt_handle)print"DeleteMessageSucceed!
ReceiptHandle:%s"%recv_msg.
receipt_handleexceptMNSException,e:print"DeleteMessageFail!
Exception:%s\n"%e$pythondeletequeue.
pyMyQueue1DeleteQueueSucceed!
QueueName:MyQueue1#initmy_account,my_queuemy_account=Account(endpoint,accid,acckey,token)queue_name=sys.
argv[1]iflen(sys.
argv)>1else"MySampleQueue"my_queue=my_account.
get_queue(queue_name)#deletequeuetry:my_queue.
delete()print"DeleteQueueSucceed!
QueueName:%s\n"%queue_nameexceptMNSExceptionBase,e:print"DeleteQueueFail!
Exception:%s\n"%e消息服务/SDK使用手册25--qqqqqqqqq---主题使用手册本文档介绍如何使用pythonsdk中的sample代码,完成创建主题、创建订阅、启动HttpEndpoint、发布消息、查看HttpEndpoint接收消息和删除主题操作.
1.
准备下载最新版pythonsdk,解压后进入mns_python_sdk子目录;打开sample.
cfg文件,配置AccessKeyID、AccessKeySecret和Endpoint;AccessKeyId、AccessKeySecret访问阿里云API的密钥对;如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同;SecurityToken阿里云访问控制服务提供的短期访问权限凭证,直接使用阿里云账号或者子账号访问不需要配置该项,了解详情;进入sample目录,后续使用的脚本都在这里;2.
创建主题运行createtopic.
py创建主题;默认创建的主题名称是MySampleTopic,也可以通过参数指定主题名称;主题详细信息请参考详情;运行核心代码endpoint,accid,acckey和token从第1步的配置文件中读取;$pythoncreatetopic.
pyMyTopic1CreateTopicSucceed!
TopicName:MyTopic1#initmy_account,my_topicmy_account=Account(endpoint,accid,acckey,token)topic_name=sys.
argv[1]iflen(sys.
argv)>1else"MySampleTopic"my_topic=my_account.
get_topic(topic_name)#youcangetmoreinformationofTopicMetafrommns/topic.
pytopic_meta=TopicMeta()try:topic_url=my_topic.
create(topic_meta)消息服务/SDK使用手册26qqq--3.
启动HttpEndpoint运行simple_http_notify_endpoint.
py启动HttpEndpoint;脚本启动后,输出该脚本的监听地址,这个地址后续作为创建订阅的Endpoint参数,用于接收MNS推送消息的请求;服务器功能对MNS推送消息请求做签名验证,如果错误,返回MNS403;解析推送请求的body,打印到日志中,如果解析错误,返回MNS400;如果验权和解析body均正常,返回MNS201;运行由于simple_http_notify_endpoint.
py的代码较多,请直接查看sdk中的源码.
4.
创建订阅运行subscribe.
py创建订阅;第一个参数指定接收消息的HttpEndpoint,使用第3步中脚本输出的Address;第二个参数指定订阅的主题名称,如果第2步中指定了主题名称,这里同样指定主题名称;第三个参数指定订阅的名称,默认是MySampleTopic-Sub;订阅详细信息请参考详情;运行核心代码endpoint,accid,acckey和token从第1步的配置文件中读取;print"CreateTopicSucceed!
TopicName:%s\n"%topic_nameexceptMNSExceptionBase,e:ife.
type=="TopicAlreadyExist":print"Topicalreadyexist,pleasedeleteitbeforecreatingoruseitdirectly.
"sys.
exit(0)print"CreateTopicFail!
Exception:%s\n"%e$pythonsimple_http_notify_endpoint.
pyStartEndpoint!
Address:http://10.
101.
161.
37:8080$pythonsubscribe.
pyhttp://10.
101.
161.
37:8080MyTopic1MyTopic1-Sub1CreateSubscriptionSucceed!
TopicName:MyTopic1SubName:MyTopic1-Sub1Endpoint:http://10.
101.
161.
37:8080sub_endpoint=sys.
argv[1]消息服务/SDK使用手册27--5.
发布消息运行publishmessage.
py发布多条消息到主题中;如果第2步中指定了主题名称,这里同样通过第一个参数指定主题名称;消息详细信息请参考详情;运行核心代码endpoint,accid,acckey和token从第1步的配置文件中读取;#initmy_account,my_topic,my_submy_account=Account(endpoint,accid,acckey,token)topic_name=sys.
argv[2]iflen(sys.
argv)>2else"MySampleTopic"my_topic=my_account.
get_topic(topic_name)sub_name=sys.
argv[3]iflen(sys.
argv)>3else"MySampleTopic-Sub"my_sub=my_topic.
get_subscription(sub_name)#youcangetmoreinformationofSubscriptionMetafrommns/subscription.
pysub_meta=SubscriptionMeta(sub_endpoint)try:topic_url=my_sub.
subscribe(sub_meta)print"CreateSubscriptionSucceed!
TopicName:%sSubName:%sEndpoint:%s\n"%(topic_name,sub_name,sub_endpoint)exceptMNSExceptionBase,e:ife.
type=="TopicNotExist":print"Topicnotexist,pleasecreatetopic.
"sys.
exit(0)elife.
type=="SubscriptionAlreadyExist":print"Subscriptionalreadyexist,pleaseunsubscribeoruseitdirectly.
"sys.
exit(0)print"CreateSubscriptionFail!
Exception:%s\n"%e$pythonpublishmessage.
pyMyTopic1PublishMessageToTopic=TopicName:MyTopic1MessageCount:3PublishMessageSucceed.
MessageBody:Iamtestmessage0.
MessageID:F6EA56633844DBFC-1-154BDFB8059-200000004PublishMessageSucceed.
MessageBody:Iamtestmessage1.
MessageID:F6EA56633844DBFC-1-154BDFB805F-200000005PublishMessageSucceed.
MessageBody:Iamtestmessage2.
MessageID:F6EA56633844DBFC-1-154BDFB8062-200000006#initmy_account,my_topicmy_account=Account(endpoint,accid,acckey,token)topic_name=sys.
argv[1]iflen(sys.
argv)>1else"MySampleTopic"my_topic=my_account.
get_topic(topic_name)消息服务/SDK使用手册28-qqq-qqq6.
查看HttpEndpoint接收消息第5步发布了多条消息到主题中,MNS会将发布的消息推送给第3步启动的HttpEndpoint;HttpEndpoint在接收到消息推送请求后,会记录两种日志:access_log和endpoint_log;accesslog启动HttpEndpoint的地方会打印accesslog,显示推送消息请求的基本信息,从左往右依次是:RequestTimeRequestVersionReturnCodeURIHTTPVersionRequestLengthHostAgentMNSRequestIDMNSVersion除打印到屏幕上,accesslog会写到日志文件中,文件名格式是access_log.
$port,本文档对应的日志文件是access_log.
8080;第5步发布消息对应的推送请求accesslog如下:endpointlog记录每个请求的详细信息,包含完整的header、body以及解析后消息各属性的信息;日志的文件名格式是endpoint_log.
$port,本文档对应的日志文件是endpoint_log.
8080第5步发布消息对应的推送请求的endpointlog如下:#publishsomemessagesmsg_count=3print"%sPublishMessageToTopic%s\nTopicName:%s\nMessageCount:%s\n"%(10*"=",10*"=",topic_name,msg_count)foriinrange(msg_count):try:msg_body="Iamtestmessage%s.
"%imsg=TopicMessage(msg_body)re_msg=my_topic.
publish_message(msg)print"PublishMessageSucceed.
MessageBody:%sMessageID:%s"%(msg_body,re_msg.
message_id)exceptMNSExceptionBase,e:ife.
type=="TopicNotExist":print"Topicnotexist,pleasecreateit.
"sys.
exit(1)print"PublishMessageFail.
Exception:%s"%e$pythonsimple_http_notify_endpoint.
pyStartEndpoint!
Address:http://10.
101.
161.
37:8080[17/May/201617:10:56]"POST""201""/notifications""HTTP/1.
1""495""10.
101.
161.
37:8080""AliyunNotificationServiceAgent""573AE020B2B71CFC6801A6EF""2015-06-06"[17/May/201617:10:56]"POST""201""/notifications""HTTP/1.
1""495""10.
101.
161.
37:8080""AliyunNotificationServiceAgent""573AE020B2B71CFC6801A712""2015-06-06"[17/May/201617:10:56]"POST""201""/notifications""HTTP/1.
1""495""10.
101.
161.
37:8080""AliyunNotificationServiceAgent""573AE020B2B71CFC6801A704""2015-06-06"$catendpoint_log.
8080.
.
.
[2016-05-1717:10:56][root][INFO][simple_http_notify_endpoint.
py:47][1096657216]NotifyMessageSucceed!
消息服务/SDK使用手册29--7.
删除主题运行deletetopic.
py删除主题;如果第2步中指定了主题名称,这里同样通过第一个参数指定主题名称;运行核心代码MessageMD5:075C3D4AEB2D2F2D6A4C17C9D6DBBEBBTopicOwner:1269128356620446PublishTime:1463476256857Subscriber:1269128356620446MessageTag:SubscriptionName:MyTopic1-Sub1MessageId:F6EA56633844DBFC-1-154BDFB8059-200000004Message:Iamtestmessage0.
TopicName:MyTopic1[2016-05-1717:10:56][root][INFO][simple_http_notify_endpoint.
py:47][1123260736]NotifyMessageSucceed!
MessageMD5:3BCFB142A3CC597F5D409BFE9DB1B885TopicOwner:1269128356620446PublishTime:1463476256866Subscriber:1269128356620446MessageTag:SubscriptionName:MyTopic1-Sub1MessageId:F6EA56633844DBFC-1-154BDFB8062-200000006Message:Iamtestmessage2.
TopicName:MyTopic1[2016-05-1717:10:56][root][INFO][simple_http_notify_endpoint.
py:47][1112770880]NotifyMessageSucceed!
MessageMD5:8356BC7FFBD22CC971BE7FF7427202B6TopicOwner:1269128356620446PublishTime:1463476256863Subscriber:1269128356620446MessageTag:SubscriptionName:MyTopic1-Sub1MessageId:F6EA56633844DBFC-1-154BDFB805F-200000005Message:Iamtestmessage1.
TopicName:MyTopic1$pythondeletetopic.
pyMyTopic1DeleteTopicSucceed!
TopicName:MyTopic1#initmy_account,my_topicmy_account=Account(endpoint,accid,acckey,token)topic_name=sys.
argv[1]iflen(sys.
argv)>1else"MySampleTopic"my_topic=my_account.
get_topic(topic_name)try:my_topic.
delete()print"DeleteTopicSucceed!
TopicName:%s\n"%topic_nameexceptMNSExceptionBase,e:print"DeleteTopicFail!
Exception:%s\n"%e消息服务/SDK使用手册30HttpEndpoint示例代码这里仅展示HttpEndpoint部分核心代码,完整的代码请参考pythonsdk中simple_http_notify_endpoint.
py.
classSimpleHttpNotifyEndpoint(BaseHTTPServer.
BaseHTTPRequestHandler):server_version="SimpleHttpNotifyEndpoint/"+__version__access_log_file="access_log"msg_type="XML"defdo_POST(self):content_length=int(self.
headers.
getheader('content-length',0))self.
req_body=self.
rfile.
read(content_length)self.
msg=NotifyMessage()logger.
info("Headers:%s\nBody:%s"%(self.
headers,self.
req_body))ifnotself.
authenticate():res_code=403res_content="AccessForbidden"logger.
warning("AccessForbidden!
\nHeaders:%s\nReqBody:%s\n"%(self.
headers,self.
req_body))elifnotself.
validateBody(self.
req_body,self.
msg,self.
msg_type):res_code=400res_content="InvalidNotifyMessage"logger.
warning("InvalidNotifyMessage!
\nHeaders:%s\nReqBody:%s\n"%(self.
headers,self.
req_body))else:res_code=201res_content=""logger.
info("NotifyMessageSucceed!
\n%s"%self.
msg)self.
access_log(res_code)self.
response(res_code,res_content)defauthenticate(self):#getstringtosignatureservice_str="\n".
join(sorted(["%s:%s"%(k,v)fork,vinself.
headers.
items()ifk.
startswith("x-mns-")]))sign_header_list=[]forkeyin["content-md5","content-type","date"]:ifkeyinself.
headers.
keys():sign_header_list.
append(self.
headers.
getheader(key))else:sign_header_list.
append("")str2sign="%s\n%s\n%s\n%s"%(self.
command,"\n".
join(sign_header_list),service_str,self.
path)#verifyauthorization=self.
headers.
getheader('Authorization')signature=base64.
b64decode(authorization)cert_str=urllib2.
urlopen(base64.
b64decode(self.
headers.
getheader('x-mns-signing-cert-url'))).
read()pubkey=M2Crypto.
X509.
load_cert_string(cert_str).
get_pubkey()pubkey.
reset_context(md='sha1')pubkey.
verify_init()pubkey.
verify_update(str2sign)returnpubkey.
verify_final(signature)defvalidateBody(self,data,msg,type):iftype=="XML":消息服务/SDK使用手册31C#SDKMNSCsharpSDK建议下载最新发布的SDK版本以获得最佳性能和稳定性.
returnself.
xml_decode(data,msg)else:msg.
message=datareturnTruedefxml_decode(self,data,msg):ifdata=="":logger.
error("Datais\"\".
")returnFalsetry:dom=xml.
dom.
minidom.
parseString(data)exceptException,e:logger.
error("Parsestringfail,exception:%s"%e)returnFalsenode_list=dom.
getElementsByTagName("Notification")ifnotnode_list:logger.
error("Getnodeof\"Notification\"fail:%s"%e)returnFalsedata_dic={}fornodeinnode_list[0].
childNodes:ifnode.
nodeName!
="#text"andnode.
childNodes!
=[]:data_dic[node.
nodeName]=str(node.
childNodes[0].
nodeValue.
strip())key_list=["TopicOwner","TopicName","Subscriber","SubscriptionName","MessageId","MessageMD5","Message","PublishTime"]forkeyinkey_list:ifkeynotindata_dic.
keys():logger.
error("Checkitemfail.
Need\"%s\".
"%key)returnFalsemsg.
topic_owner=data_dic["TopicOwner"]msg.
topic_name=data_dic["TopicName"]msg.
subscriber=data_dic["Subscriber"]msg.
subscription_name=data_dic["SubscriptionName"]msg.
message_id=data_dic["MessageId"]msg.
message_md5=data_dic["MessageMD5"]msg.
message_tag=data_dic["MessageTag"]ifdata_dic.
has_key("MessageTag")else""msg.
message=data_dic["Message"]msg.
publish_time=data_dic["PublishTime"]returnTrue消息服务/SDK使用手册321.
1.
2.
1.
2.
3.
4.
5.
1.
1.
2.
Version1.
3.
3更新日期2016-06-07sdk下载更新内容发送带有DelaySeconds属性的消息时,response中添加ReceiptHandle前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;Version1.
3.
2更新日期2016-05-31sdk下载更新内容修复Subscribe时ContentFormat设置的问题前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";消息服务/SDK使用手册331.
2.
3.
4.
5.
1.
1.
2.
1.
2.
3.
4.
5.
运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;Version1.
3.
1更新日期2016-05-18sdk下载更新内容修复SendMessage时Priority设置的问题前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";消息服务/SDK使用手册341.
2.
3.
1.
2.
1.
2.
3.
4.
5.
1.
1.
Version1.
3.
0更新日期2016-05-17sdk下载更新内容支持LoggingEnabled属性Topic支持Queue和邮件推送支持.
netframework3.
5前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;Version1.
1.
3更新日期2016-03-17sdk下载更新内容为MNSClient添加GetNativeTopic前置需求阿里云开发者账户(参见www.
aliyun.
com);privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";消息服务/SDK使用手册352.
1.
2.
3.
4.
5.
1.
1.
2.
1.
2.
3.
4.
5.
开通了MNS服务(http://www.
aliyun.
com/product/mns)运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;Version1.
1.
2更新日期2016-02-19sdk下载更新内容为Topic添加SampleHttpServer,提供了如何处理通知消息的示例前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";消息服务/SDK使用手册361.
1.
2.
1.
2.
3.
4.
5.
1.
1.
2.
Version1.
1.
1更新日期2016-02-18sdk下载更新内容为Topic添加PublishMessage的接口前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;Version1.
1.
0更新日期2016-01-05sdk下载更新内容添加对于Topic功能的支持前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";消息服务/SDK使用手册371.
2.
3.
4.
5.
1.
2.
1.
2.
3.
4.
运行帮助用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;在Sample工程里可以看到几个Sample文件,分别对应不同的操作示例;填充Aliyun_MNS_Sample工程中对应Sample文件的AccessKeyId,SecretAccessKey和EndPoint;将想要执行的Sample文件设置为VisualStudio工程的启动项;运行;Version1.
0.
0更新日期2015-09-10sdk下载前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)Sample运行帮助填充SyncOperationSample/AsyncOperationSample中的AccessKeyId,SecretAccessKey和EndPoint;privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";用VisualStudio导入工程,选中AliyunSDK_MNS_Sample;将SyncOperationSample/AsyncOperationSample设置为启动项:运行Sample;队列使用手册本文档介绍如何使用csharpsdk,完成创建队列、发送消息、接收删除消息和删除队列操作.
privateconststring_accessKeyId="youraccesskeyid";privateconststring_secretAccessKey="yoursecretaccesskey";privateconststring_endpoint="validendpoint,比如http://$AccountId.
mns.
cn-hangzhou.
aliyuncs.
com";消息服务/SDK使用手册381.
-qqq-qq-1.
准备下载最新版csharpsdk,解压后将工程导入到VisualStudio;工程里有4个项目,其中一个是AliyunSDK_MNS,这个就是SDK所在的项目.
右击这个项目名,选择重新生成,可以在项目的bin目录下找到生成的Aliyun.
MNS.
dll2.
1其他几个项目里都需要引用这个生成的dll,请配置好其他几个项目的"引用"在AliyunSDK_MNS_Sample这个项目里,有我们接下来会介绍的队列操作的Sample:SyncOperationSample.
cs3.
1将AliyunSDK_MNS_Sample这个项目设置为启动项,并将SyncOperationSample设置为启动对象3.
2打开SyncOperationSample.
cs文件,在文件的最上几行,配置AccessKeyID、AccessKeySecret和Endpoint;AccessKeyId、AccessKeySecret访问阿里云API的密钥对;如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同;2.
创建队列如果之前未创建过队列,那么首先需要创建队列.
默认创建的队列名称是myqueue,也可以修改代码指定队列名称;//1.
这里我们指定了Queue的一些属性,对于Queue的属性,请参考http://help.
aliyun.
com/document_detail/27476.
htmlvarcreateQueueRequest=newCreateQueueRequest{QueueName=_queueName,Attributes={//VisibilityTimeout是最重要的属性,默认为30秒,请务必参考Queue的属性页面里的详细介绍VisibilityTimeout=30,MaximumMessageSize=40960,MessageRetentionPeriod=345600,//PollingWaitSeconds是非常重要的长轮询超时时间PollingWaitSeconds=30}};try消息服务/SDK使用手册39---3.
发送消息创建完队列之后,就可以开始发送消息到队列中了;4.
接收和删除消息现在队列里已经有了一条消息,我们可以来尝试接收消息.
消息服务MNS的Message有一项属性叫做NextVisibleTime.
这是一项非常有用和重要的属性,具体描述请参照http://help.
aliyun.
com/document_detail/27477.
html页面里对应的解释.
{//2.
创建队列//2.
1如果不需要特别指定Queue的属性,那么这里也可以直接使用client.
CreateQueue(_queueName);varqueue=client.
CreateQueue(createQueueRequest);Console.
WriteLine("Createqueuesuccessfully,queuename:{0}",queue.
QueueName);}catch(MNSExceptionme){//3.
如果创建队列出错,这里可以根据具体的错误Code做处理//3.
1也可以分别CatchQueueAlreadyExistException等做单独处理Console.
WriteLine("CreateQueueFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("Createqueuefailed,exceptioninfo:"+ex.
Message);}try{//1.
获取Queue的实例varnativeQueue=client.
GetNativeQueue(_queueName);//2.
生成SendMessageRequest,可以对Message有一些额外的属性设置varsendMessageRequest=newSendMessageRequest("阿里云计算");//3.
发送消息//3.
1也可以直接使用nativeQueue.
SendMessage("MessageBody");varsendMessageResponse=nativeQueue.
SendMessage(sendMessageRequest);Console.
WriteLine("Sendmessagesucceed");}catch(MNSExceptionme){//3.
如果创建队列出错,这里可以根据具体的错误Code做处理//3.
1也可以分别CatchQueueNotExistException等做单独处理Console.
WriteLine("SendMessageFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("Sendmessagefailed,exceptioninfo:"+ex.
Message);}$receiptHandle=NULL;try消息服务/SDK使用手册40-5.
删除队列Sample里最后会删除这个测试队列{//1.
直接调用receiveMessage函数//1.
1receiveMessage函数接受waitSeconds参数,无特殊情况这里都是建议设置为30//1.
2waitSeconds非0表示这次receiveMessage是一次httplongpolling,如果queue内刚好没有message,那么这次request会在server端等到queue内有消息才返回.
最长等待时间为waitSeconds的值,最大为30.
varreceiveMessageResponse=nativeQueue.
ReceiveMessage(30);//2.
获取ReceiptHandle,这是一个有时效性的Handle,可以用来设置Message的各种属性和删除Message.
具体的解释请参考:help.
aliyun.
com/document_detail/27477.
html页面里的ReceiptHandle_receiptHandle=message.
ReceiptHandle;}catch(MNSExceptionme){//3.
像前面的CreateQueue和SendMessage一样,我们认为ReceiveMessage也是有可能出错的,所以这里加上CatchException并做对应的处理.
Console.
WriteLine("SendMessageFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("Sendmessagefailed,exceptioninfo:"+ex.
Message);}//这里是用户自己的处理消息的逻辑.
Sample里就直接略过这一步了.
//如果这里发生了程序崩溃或卡住等异常情况,对应的Message会在VisibilityTimeout之后重新可见,从而可以被其他进程处理,避免消息丢失.
//4.
现在消息已经处理完了.
我们可以从队列里删除这条消息了.
try{//5.
直接调用deleteMessage即可.
vardeleteMessageResponse=nativeQueue.
DeleteMessage(_receiptHandle);}catch(MNSExceptionme){//6.
这里CatchException并做异常处理//6.
1如果是receiptHandle已经过期,那么ErrorCode是MessageNotExist,表示通过这个receiptHandle已经找不到对应的消息.
//6.
2为了保证receiptHandle不过期,VisibilityTimeout的设置需要保证足够消息处理完成.
并且在消息处理过程中,也可以调用changeMessageVisibility这个函数来延长消息的VisibilityTimeout时间.
Console.
WriteLine("DeleteMessageFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("Deletemessagefailed,exceptioninfo:"+ex.
Message);}try{vardeleteQueueResponse=client.
DeleteQueue(deleteQueueRequest);}catch(MNSExceptionme)消息服务/SDK使用手册411.
-qqq-qq-主题使用手册本文档介绍如何使用csharpsdk中的sample代码,完成创建主题、创建订阅、启动HttpEndpoint、发布消息、查看HttpEndpoint接收消息和删除主题操作.
1.
准备下载最新版csharpsdk,解压后将工程导入到VisualStudio;工程里有4个项目,其中一个是AliyunSDK_MNS,这个就是SDK所在的项目.
右击这个项目名,选择重新生成,可以在项目的bin目录下找到生成的Aliyun.
MNS.
dll2.
1其他几个项目里都需要引用这个生成的dll,请配置好其他几个项目的"引用"在AliyunSDK_MNS_Sample这个项目里,有我们接下来会介绍的队列操作的Sample:SyncTopicOperations.
cs3.
1将AliyunSDK_MNS_Sample这个项目设置为启动项,并将SyncTopicOperations设置为启动对象3.
2打开SyncTopicOperations.
cs文件,在文件的最上几行,配置AccessKeyID、AccessKeySecret和Endpoint;AccessKeyId、AccessKeySecret访问阿里云API的密钥对;如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同;2.
创建主题如果之前未创建过主题(Topic),那么首先需要创建Topic.
默认创建的Topic名称是TestCSharpTopic,也可以修改代码指定Topic名称;{Console.
WriteLine("DeleteQueueFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("Deletequeuefailed,exceptioninfo:"+ex.
Message);}消息服务/SDK使用手册42-qqq--3.
启动HttpEndpointMNS_CSharp_SDK_Test项目下有一个SampleHttpServer.
cs;将它设为启动项目并运行即可,这个SampleHttpServer依赖于.
netframework4.
5请确认本机有公网IP,否则MNSServer无法把消息通过HttpEndpoint推送到你的机器功能对MNS推送消息请求做签名验证;解析推送请求的body;返回StatusCode:200;由于SampleHttpServer的代码较多,请直接查看sdk中的源码.
4.
创建订阅创建订阅以告诉MNSServer,Topic里面的消息应该推送给谁Sample里使用的是Http的Endpoint//1.
生成一个CreateTopicRequest实例,参数传入topicName.
这里可以同时传入TopicAttributes,以便在CreateTopic时同时设置自定义的Topic属性.
varcreateTopicRequest=newCreateTopicRequest{TopicName=_topicName};Topictopic=null;try{topic=client.
CreateTopic(createTopicRequest);Console.
WriteLine("Createtopicsuccessfully,topicname:{0}",topic.
TopicName);}catch(MNSExceptionme){//2.
可能因为网络错误,或者Topic已经存在等原因导致CreateTopic失败,这里CatchException并做对应的处理//2.
1也可以分别CatchTopicAlreadyExistException等做单独处理Console.
WriteLine("CreateTopicFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("Createtopicfailed,exceptioninfo:"+ex.
Message);return;}try{//1.
生成SubscriptionAttributes,这里第二个参数是Subscription的Endpoint.
请将"XXXX"改成实际的IP和Port消息服务/SDK使用手册43----5.
发布消息现在我们可以发布消息到Topic中,并且期待在HttpServer上收到对应的消息.
6.
查看HttpEndpoint接收消息第5步发布了一条消息到Topic中,MNS会将发布的消息推送给第3步启动的HttpEndpoint;HttpEndpoint在接收到消息推送请求后,会打印到console;7.
取消订阅现在我们不需要再接收消息啦,可以告诉MNSServer取消订阅//1.
1这里设置的是刚才启动的httpserver的地址//1.
2更多支持的Endpoint类型可以参考:help.
aliyun.
com/document_detail/27479.
htmlSubscribeResponseres=topic.
Subscribe(_subscriptionName,"http://XXXX");//2.
订阅成功Console.
WriteLine("Subscribesucceed");}catch(MNSExceptionme){//3.
可能因为网络错误,或者同名的Subscription已存在等原因导致订阅出错,这里CatchException并做对应的处理Console.
WriteLine("SubscribeFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("Subscribefailed,exceptioninfo:"+ex.
Message);}try{//1.
1如果是推送到邮箱,还需要生成PublishMessageRequest并设置MessageAttributesvarresponse=topic.
PublishMessage("messagehere");Console.
WriteLine("PublishMessagesucceed!
"+response.
MessageId);}catch(MNSExceptionme){//3.
可能因为网络错误等原因导致PublishMessage失败,这里CatchException并做对应处理Console.
WriteLine("PublishMessageFailed!
ErrorCode:"+me.
ErrorCode);}catch(Exceptionex){Console.
WriteLine("PublishMessagefailed,exceptioninfo:"+ex.
Message);}try{topic.
Unsubscribe(_subscriptionName);Console.
WriteLine("Unsubscribesucceed!
");}消息服务/SDK使用手册44-1.
1.
2.
3.
8.
删除主题Sample中,我们最后删除了这个测试用的TopicPHPSDKMNSPHPSDK建议下载最新发布的SDK版本以获得最佳性能和稳定性.
Version1.
3.
1更新日期2016-05-19SDK下载更新内容Samples改进,主要是修改了读取Topic消息的HttpServerSample前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)PHPVersion>=5.
5catch(Exceptionex){Console.
WriteLine("Subscribefailed,exceptioninfo:"+ex.
Message);}try{client.
DeleteTopic(_topicName);Console.
WriteLine("Deletetopicsucceed");}catch(Exceptionex){Console.
WriteLine("Deletetopicfailed,exceptioninfo:"+ex.
Message);}消息服务/SDK使用手册451.
1.
2.
3.
1.
2.
1.
1.
2.
3.
1.
2.
Version1.
3.
0更新日期2016-02-25sdk下载更新内容Subscription增加Queue/Mail推送的支持前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)PHPVersion>=5.
5运行帮助下载并解压SDK到任意目录在使用SDK的文件里加上一行:require_once("/path_to_sdk/mns-autoloader.
php");Version1.
2.
2更新日期2016-02-25sdk下载更新内容Fix了PHPSDK里BatchSendResponse未能正确返回结果的BUG.
前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)PHPVersion>=5.
5运行帮助下载并解压SDK到任意目录在使用SDK的文件里加上一行:require_once("/path_to_sdk/mns-autoloader.
php");Version1.
2.
1消息服务/SDK使用手册461.
1.
2.
3.
1.
2.
1.
1.
2.
3.
1.
2.
更新日期2016-02-22sdk下载更新内容在PHPSDK里Queue的所有MessageBody都是被默认做了Base64处理.
这个版本的Queue提供了禁用Base64的选项,需要在getQueueRef的时候传入参数$base64=FALSE;前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)PHPVersion>=5.
5运行帮助下载并解压SDK到任意目录在使用SDK的文件里加上一行:require_once("/path_to_sdk/mns-autoloader.
php");Version1.
2.
0更新日期2016-02-14sdk下载更新内容(重要)PublishMessage接口不再对MessageBody做Base64编码前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)PHPVersion>=5.
5运行帮助下载并解压SDK到任意目录在使用SDK的文件里加上一行:require_once("/path_to_sdk/mns-autoloader.
php");Version1.
1.
0更新日期消息服务/SDK使用手册471.
2.
1.
2.
3.
1.
2.
1.
2.
3.
1.
2.
-2016-01-05sdk下载更新内容添加对于Topic功能的支持添加对于STSToken的支持前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)PHPVersion>=5.
5运行帮助下载并解压SDK到任意目录在使用SDK的文件里加上一行:require_once("/path_to_sdk/mns-autoloader.
php");Version1.
0.
0更新日期2015-11-07sdk下载前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)PHPVersion>=5.
5运行帮助下载并解压SDK到任意目录在使用SDK的文件里加上一行:require_once("/path_to_sdk/mns-autoloader.
php");队列使用手册本文档介绍如何使用phpsdk,完成创建队列、发送消息、接收删除消息和删除队列操作.
1.
准备下载最新版phpsdk,解压后进入php_sdk/Samples/Queue子目录;消息服务/SDK使用手册48-qqqqqqq---打开CreateQueueAndSendMessage.
php文件,在文件的最下几行,配置AccessKeyID、AccessKeySecret和Endpoint;AccessKeyId、AccessKeySecret访问阿里云API的密钥对;如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同;CreateQueueAndSendMessage的代码顶部有一些设置,在使用SDK的时候需要做同样的设置2.
创建队列如果之前未创建过队列,那么首先需要创建队列.
默认创建的队列名称是CreateQueueAndSendMessageExample,也可以修改代码指定队列名称;3.
发送消息创建完队列之后,就可以开始发送消息到队列中了;//requiresdk里自带的一个autoload文件即可require_once(dirname(dirname(dirname(__FILE__))).
'/mns-autoloader.
php');//代码里需要用的一些phpclassuseAliyunMNS\Client;useAliyunMNS\Requests\SendMessageRequest;useAliyunMNS\Requests\CreateQueueRequest;useAliyunMNS\Exception\MnsException;//1.
首先初始化一个client$this->client=newClient($this->endPoint,$this->accessId,$this->accessKey);//2.
生成一个CreateQueueRequest对象.
CreateQueueRequest还可以接受一个QueueAttributes参数,用来初始化生成的queue的属性.
//2.
1对于queue的属性,请参考help.
aliyun.
com/document_detail/27476.
html$request=newCreateQueueRequest($queueName);try{$res=$this->client->createQueue($request);//2.
2CreateQueue成功echo"QueueCreated!
\n";}catch(MnsException$e){//2.
3可能因为网络错误,或者Queue已经存在等原因导致CreateQueue失败,这里CatchException并做对应的处理echo"CreateQueueFailed:".
$e.
"\n";echo"MNSErrorCode:".
$e->getMnsErrorCode().
"\n";return;}消息服务/SDK使用手册49--4.
接收和删除消息现在队列里已经有了一条消息,我们可以来尝试接收消息.
消息服务MNS的Message有一项属性叫做NextVisibleTime.
这是一项非常有用和重要的属性,具体描述请参照http://help.
aliyun.
com/document_detail/27477.
html页面里对应的解释.
//1.
首先获取Queue的实例//1.
1PHPSDK默认会对发送的消息做Base64Encode,对接收到的消息做Base64Decode.
//1.
2如果不希望SDK做这样的Base64操作,可以在getQueueRef的时候,传入参数$base64=FALSE.
即$queue=$this->client->getQueueRef($queueName,FALSE);$queue=$this->client->getQueueRef($queueName);$messageBody="test";//2.
生成一个SendMessageRequest对象//2.
1SendMessageRequest对象本身也包含了DelaySeconds和Priority属性可以设置.
//2.
2对于Message的属性,请参考help.
aliyun.
com/document_detail/27477.
html$request=newSendMessageRequest($messageBody);try{$res=$queue->sendMessage($request);//3.
消息发送成功echo"MessageSent!
\n";}catch(MnsException$e){//4.
可能因为网络错误,或MessageBody过大等原因造成发送消息失败,这里CatchException并做对应的处理.
echo"SendMessageFailed:".
$e.
"\n";echo"MNSErrorCode:".
$e->getMnsErrorCode().
"\n";return;}$receiptHandle=NULL;try{//1.
直接调用receiveMessage函数//1.
1receiveMessage函数接受waitSeconds参数,无特殊情况这里都是建议设置为30//1.
2waitSeconds非0表示这次receiveMessage是一次httplongpolling,如果queue内刚好没有message,那么这次request会在server端等到queue内有消息才返回.
最长等待时间为waitSeconds的值,最大为30.
$res=$queue->receiveMessage(30);echo"ReceiveMessageSucceed!
\n";//2.
获取ReceiptHandle,这是一个有时效性的Handle,可以用来设置Message的各种属性和删除Message.
具体的解释请参考:help.
aliyun.
com/document_detail/27477.
html页面里的ReceiptHandle$receiptHandle=$res->getReceiptHandle();}catch(MnsException$e){//3.
像前面的CreateQueue和SendMessage一样,我们认为ReceiveMessage也是有可能出错的,所以这里加上CatchException并做对应的处理.
echo"ReceiveMessageFailed:".
$e.
"\n";echo"MNSErrorCode:".
$e->getMnsErrorCode().
"\n";return;}消息服务/SDK使用手册50---q5.
删除队列Sample里最后会删除这个测试队列主题使用手册本文档介绍如何使用phpsdk中的sample代码,完成创建主题、创建订阅、启动HttpEndpoint、发布消息、查看HttpEndpoint接收消息和删除主题操作.
1.
准备下载最新版phpsdk,解压后进入php_sdk/Samples/Topic子目录;打开CreateTopicAndSendMessage.
php文件,在文件的最下几行,配置AccessKeyID、AccessKeySecret,Endpoint,以及要推送到的HttpServer的IP和Port;AccessKeyId、AccessKeySecret//这里是用户自己的处理消息的逻辑.
Sample里就直接略过这一步了.
//如果这里发生了程序崩溃或卡住等异常情况,对应的Message会在VisibilityTimeout之后重新可见,从而可以被其他进程处理,避免消息丢失.
//4.
现在消息已经处理完了.
我们可以从队列里删除这条消息了.
try{//5.
直接调用deleteMessage即可.
$res=$queue->deleteMessage($receiptHandle);echo"DeleteMessageSucceed!
\n";}catch(MnsException$e){//6.
这里CatchException并做异常处理//6.
1如果是receiptHandle已经过期,那么ErrorCode是MessageNotExist,表示通过这个receiptHandle已经找不到对应的消息.
//6.
2为了保证receiptHandle不过期,VisibilityTimeout的设置需要保证足够消息处理完成.
并且在消息处理过程中,也可以调用changeMessageVisibility这个函数来延长消息的VisibilityTimeout时间.
echo"DeleteMessageFailed:".
$e.
"\n";echo"MNSErrorCode:".
$e->getMnsErrorCode().
"\n";return;}try{$this->client->deleteQueue($queueName);echo"DeleteQueueSucceed!
\n";}catch(MnsException$e){echo"DeleteQueueFailed:".
$e;return;}消息服务/SDK使用手册51qqqqqqqq---访问阿里云API的密钥对;如果使用主账号访问,登陆阿里云AccessKey管理页面创建、查看;如果使用子账号访问,请登录阿里云访问控制控制台查看;Endpoint访问MNS的接入地址,登陆MNS控制台单击右上角获取Endpoint查看;不同地域的接入地址不同;ip需要是公网能访问的IPCreateTopicAndSendMessage的代码顶部有一些设置,在使用SDK的时候需要做同样的设置2.
创建主题如果之前未创建过主题(Topic),那么首先需要创建Topic.
默认创建的Topic名称是CreateTopicAndPublishMessageExample,也可以修改代码指定Topic名称;3.
启动HttpEndpoint运行http_server_sample.
php启动PHP的内置HttpServer,用来接收MNSServer发送过来的httprequest;具体命令:php-S$ip:$porthttp_server_sample.
php这里的IP必须是公网能访问的IP//requiresdk里自带的一个autoload文件即可require_once(dirname(dirname(dirname(__FILE__))).
'/mns-autoloader.
php');//代码里需要用的一些phpclassuseAliyunMNS\Client;useAliyunMNS\Model\SubscriptionAttributes;useAliyunMNS\Requests\PublishMessageRequest;useAliyunMNS\Requests\CreateTopicRequest;useAliyunMNS\Exception\MnsException;//1.
生成一个CreateTopicRequest实例,参数传入topicName.
这里可以同时传入TopicAttributes,以便在CreateTopic时同时设置自定义的Topic属性.
$request=newCreateTopicRequest($topicName);try{$res=$this->client->createTopic($request);echo"TopicCreated!
\n";}catch(MnsException$e){//2.
可能因为网络错误,或者Topic已经存在等原因导致CreateTopic失败,这里CatchException并做对应的处理echo"CreateTopicFailed:".
$e.
"\n";echo"MNSErrorCode:".
$e->getMnsErrorCode().
"\n";return;}消息服务/SDK使用手册52qqqq---功能对MNS推送消息请求做签名验证;对消息内容做MD5验证;解析推送请求的body;返回StatusCode:200;由于http_server_sample.
php的代码较多,请直接查看sdk中的源码.
4.
创建订阅创建订阅以告诉MNSServer,Topic里面的消息应该推送给谁Sample里使用的是Http的Endpoint5.
发布消息现在我们可以发布消息到Topic中,并且期待在HttpServer上收到对应的消息.
$subscriptionName="SubscriptionExample";//1.
生成SubscriptionAttributes,这里第二个参数是Subscription的Endpoint.
//1.
1这里设置的是刚才启动的httpserver的地址//1.
2更多支持的Endpoint类型可以参考:help.
aliyun.
com/document_detail/27479.
html$attributes=newSubscriptionAttributes($subscriptionName,'http://'.
$this->ipthis->port);try{$topic->subscribe($attributes);//2.
订阅成功echo"Subscribed!
\n";}catch(MnsException$e){//3.
可能因为网络错误,或者同名的Subscription已存在等原因导致订阅出错,这里CatchException并做对应的处理echo"SubscribeFailed:".
$e.
"\n";echo"MNSErrorCode:".
$e->getMnsErrorCode().
"\n";return;}$messageBody="test";//1.
生成PublishMessageRequest//1.
1如果是推送到邮箱,还需要设置MessageAttributes,可以参照Tests/TopicTest.
php里面的testPublishMailMessage$request=newPublishMessageRequest($messageBody);try{$res=$topic->publishMessage($request);//2.
PublishMessage成功echo"MessagePublished!
\n";}catch(MnsException$e)消息服务/SDK使用手册53----6.
查看HttpEndpoint接收消息第5步发布了一条消息到Topic中,MNS会将发布的消息推送给第3步启动的HttpEndpoint;HttpEndpoint在接收到消息推送请求后,会通过error_log打印到console;7.
取消订阅现在我们不需要再接收消息啦,可以告诉MNSServer取消订阅8.
删除主题Sample中,我们最后删除了这个测试用的TopicMNSC++SDK建议下载最新发布的SDK版本以获得最佳性能和稳定性.
{//3.
可能因为网络错误等原因导致PublishMessage失败,这里CatchException并做对应处理echo"PublishMessageFailed:".
$e.
"\n";echo"MNSErrorCode:".
$e->getMnsErrorCode().
"\n";return;}try{$topic->unsubscribe($subscriptionName);echo"UnsubscribeSucceed!
\n";}catch(MnsException$e){echo"UnsubscribeFailed:".
$e;return;}try{$this->client->deleteTopic($topicName);echo"DeleteTopicSucceed!
\n";}catch(MnsException$e){echo"DeleteTopicFailed:".
$e;return;}消息服务/SDK使用手册541.
2.
3.
1.
2.
3.
1.
2.
3.
1.
2.
1.
2.
1.
2.
3.
Version1.
3.
0更新日期2016-01-05sdk下载更新内容Subscription增加Queue/Mail推送的支持编译方式修改为scons,兼容Windows部分兼容性改动前置需求如果endpoint是https类型,curl版本建议>=7.
26.
0Linux系统g++版本建议>=4.
1.
2,Windows系统需要安装VS2015安装scons运行帮助下载并解压SDK在SDK目录执行scons命令lib会被自动编译到SDK的lib目录运行Sample在sample目录修改aliyun-mns.
properties,填上正确的Endpoint/AccessId/AccessKey在sample目录下执行mns_sampleVersion1.
1.
0更新日期2016-01-05sdk下载更新内容添加对于Topic功能的支持添加对于STSToken的支持前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)如果endpoint是https类型,curl版本建议>=7.
26.
0消息服务/SDK使用手册554.
1.
2.
3.
1.
2.
3.
1.
2.
3.
1.
2.
3.
1.
2.
3.
g++版本建议>=4.
1.
2运行帮助下载并解压SDK在SDK目录执行.
/configure&&make&&sudomakeinstalllibrary现在已经默认安装到/usr/local/lib,在不同的系统上可能有不同的路径.
请参照自己系统的具体设置,确定是否需要修改ldconfig.
运行Sample在sample目录修改aliyun-mns.
properties,填上正确的Endpoint/AccessId/AccessKey在sample目录下执行make运行.
/mns_sampleVersion1.
0.
0更新日期2015-12-14sdk下载前置需求阿里云开发者账户(参见www.
aliyun.
com);开通了MNS服务(http://www.
aliyun.
com/product/mns)g++版本建议>=4.
1.
2运行帮助下载并解压SDK在SDK目录执行.
/configure&&make&&sudomakeinstalllibrary现在已经默认安装到/usr/local/lib,在不同的系统上可能有不同的路径.
请参照自己系统的具体设置,确定是否需要修改ldconfig.
执行Sample在sample目录修改aliyun-mns.
properties,填上正确的Endpoint/AccessId/AccessKey在sample目录下执行make运行.
/mns_sample非官方的php,.
net,node.
js的SDK阿里云有计划提供MNS的nodeSDK,但是暂时没有时间表,在官方版本出来前,您可以直接调用MNS提供的消息服务/SDK使用手册56qqqqqRestfulAPI.
下面是论坛热心MNS用户自行封装的非官方SDK,非官方SDK无法得到阿里云的官方支持,仅用于参考学习:非官方.
netSDKhttp://bbs.
aliyun.
com/read/176285.
html非官方node.
jsSDKhttp://bbs.
aliyun.
com/read/180172.
html非官方PHPSDKhttp://bbs.
aliyun.
com/read/166464.
html非官方GolangSDKhttp://bbs.
aliyun.
com/read/277729.
htmlhttp://bbs.
aliyun.
com/read/281977.
html消息服务/SDK使用手册57

热网互联33元/月,香港/日本/洛杉矶/韩国CN2高速线路云主机

热网互联怎么样?热网互联(hotiis)是随客云计算(Suike.Cloud)成立于2009年,增值电信业务经营许可证:B1-20203716)旗下平台。热网互联云主机是CN2高速回国线路,香港/日本/洛杉矶/韩国CN2高速线路云主机,最低33元/月;热网互联国内BGP高防服务器,香港服务器,日本服务器全线活动中,大量七五折来袭!点击进入:热网互联官方网站地址热网互联香港/日本/洛杉矶/韩国cn2...

收到几个新商家投稿(HostMem,无忧云,青云互联,TTcloud,亚洲云端,趣米云),一起发布排名不分先后

7月份已经过去了一半,炎热的夏季已经来临了,主机圈也开始了大量的夏季促销攻势,近期收到一些商家投稿信息,提供欧美或者亚洲地区主机产品,价格优惠,这里做一个汇总,方便大家参考,排名不分先后,以邮件顺序,少部分因为促销具有一定的时效性,价格已经恢复故暂未列出。HostMem部落曾经分享过一次Hostmem的信息,这是一家提供动态云和经典云的国人VPS商家,其中动态云硬件按小时计费,流量按需使用;而经典...

妮妮云(100元/月)阿里云香港BGP专线 2核 4G

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...

sdk下载为你推荐
"参与方式一:线上招聘(简历投递)"administrativemywordpress模板wordpress高手进,我是新手,不知道下载的模板应该放在wordpress的那个地方.请高手指点.谢谢phpadmin下载phpMyAdmin 软件下载地址cuteftpCuteFTP的主要功能是什么?支付宝注册网站在哪里注册支付宝账号文档下载手机下载的文件在哪里能找到curl扩展系统不支持CURL 怎么解决网络u盘你们谁知道网络硬盘怎么用oa办公软件价格一般中小企业用的OA办公系统需要多少钱?
域名注册服务 中国域名网 阿里云os yardvps 狗爹 cve-2014-6271 512m 空间服务商 全站静态化 howfile 怎么测试下载速度 183是联通还是移动 hostloc 91vps 免费吧 空间合租 ftp免费空间 江苏双线服务器 新睿云 免费个人网页 更多