淘宝消息服务使用介绍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

消息服务使用介绍更新时间:2016/03/24访问次数:229642From淘宝消息服务使用To淘宝消息服务使用常用消息类型说明沙箱消息服务开通消息服务常见问题消息服务是开放平台为提高应用API调用效率而推出的一种主动推送服务(From淘宝),推送内容包括(淘宝交易、商品、退款等信息),基于该推送服务,应用获取淘宝数据不需再不停轮询API,仅需在接收到淘宝推送的消息时调用API获取即可,大大提高API调用效率和降低API使用费用。同时还提供消息回流服务(To淘宝),应用可将信息回流到淘宝,做商品数源服务等。From淘宝:即淘宝向外推送淘宝(包括天猫)的交易、商品、退款等官方消息。To淘宝:即向淘宝回流消息。那么如何使用消息服务呢?请看以下是消息服务From淘宝和To淘宝两种方式的详细使用说明。From淘宝消息服务使用应用订阅消息进入ISV控制台,在“应用管理-消息服务-订阅消息”页面,选择需要的消息进行订阅,点击相应消息后面的“订阅”即可订阅消息成功,可以在“我的订阅”中查看已经成功订阅的消息。如果需要取消消息的订阅,直接点击“取消订阅”。点击消息名称可以查看每个消息返回的详细字段信息。注意:如果该消息没有权限,则说明应用未开通相关API调用权限,通过点击“申请权限”,进入申请相应的权限包。另如果需要在沙箱开通消息服务使用,可参照本文的[沙箱消息服务开通]章节给用户开通消息调用taobao.tmc.user.permit接口给用户(即淘宝或天猫商家)开通,可以选择只给用户开通部分消息类型,也可全部开通。具体可看该API入参说明。备注:给用户开通消息前提是用户已经给应用授权,如未授权,请参考获取用户授权说明。取消用户的消息服务调用taobao.tmc.user.cancel接口。可以通过接口taobao.tmc.user.get获取用户已开通消息,入参必须输入is_valid,topics,modified来判断用户授权消息是否成功消息服务API文档:点击这里查看代码实现接收消息正式环境服务地址:ws://mc.api.taobao.com/沙箱环境服务地址:ws://mc.api.tbsandbox.com/接收消息,实现方式有两种:通过SDK接收消息、通过API接收消息,推荐采用SDK接收消息。通过SDK接收消息目前支持JAVA与.NET语言,其它语言建议采用API接收消息。通过SDK接收消息只需要关注业务的处理,不需要操心消息重发、确认、长连接的重连等操作,SDK会自动处理好一切。JAVA接口使用说明123456789101112131415publicinterfaceMessageHandler{/***消息通道客户端收到消息后,会回调该方法处理具体的业务,处理结果可以通过以下两种方式来表述:*ul*li抛出异常或设置status.fail()表明消息处理失败,需要消息通道服务端重发*li不抛出异常,也没有设置status信息,则表明消息处理成功,消息通道服务端不会再投递此消息**@parammessage消息内容*@paramstatus处理结果,如果调用status.fail(),消息通道将会择机重发消息;否则,消息通道认为消息处理成功*@throwsException消息处理失败,消息通道将会择机重发消息*/publicvoidonMessage(Messagemessage,MessageStatusstatus)throwsException;}JAVA使用代码示例12345678910111213TmcClientclient=newTmcClient(app_key,app_secret,default);//关于default参考消息分组说明client.setMessageHandler(newMessageHandler(){publicvoidonMessage(Messagemessage,MessageStatusstatus){try{System.out.println(message.getContent());System.out.println(message.getTopic());}catch(Exceptione){e.printStackTrace();status.fail();//消息处理失败回滚,服务端需要重发}}});client.connect(ws://mc.api.taobao.com);//消息环境地址:ws://mc.api.tbsandbox.com/注:采用Javamain方法在Eclipse里面运行上面的代码测试时,请在client.connect()后面加上Thread.sleep让main线程等待一段时间结束,以便观察消息的实时接收情况,否则main线程结束后,TMC长连接也会跟着断开。如果是在web服务器上运行上面的代码,则不用在client.connect()后面加任何Thread.sleep代码,也不需要在外面包一层while(true)循环,因为web服务器上的主线程只要服务器不关闭都是不会结束的,TMC的长连接会一直保持。C#使用示例代码12345678910111213141TmcClientclient=newTmcClient(appkey,appsecret,default);//关于default参考消息分组说明client.OnMessage+=(s,e)={try{Console.WriteLine(e.Message.Topic);516Console.WriteLine(e.Message.Content);//默认不抛出异常则认为消息处理成功}catch(Exceptionexp){Console.WriteLine(exp.StackTrace);e.Fail();//消息处理失败回滚,服务端需要重发}};client.Connect(ws://mc.api.taobao.com/);//消息环境地址:ws://mc.api.tbsandbox.com/注:采用C#Main方法在VS控制台工程里面运行上面的代码测试时,请在client.Connect后面加上Console.Read()或Thread.Sleep让main线程暂时不结束,以便观察消息的实时接收情况,否则Main线程结束后,TMC长连接也会跟着断开。如果是在IIS服务器或C#应用程序里面运行上面的代码,则不用在client.Connect后面加任何等待的代码,也不需要在外面包一层while(true)循环,只要保持IIS服务器或C#应用程序不关闭,TMC的长连接会一直保持。通过API接收消息提供API接收消息的目的是那种对多线程和长连接处理不方便的语言使用的,比如PHP、Python,这些语言官方暂时没有提供SDK,可以通过下面两个API配合使用也能达到接收和确认消息的目的。推荐尽量用SDK方式,如果必须使用API,建议调用taobao.tmc.messages.consume接口时尽量不要并发或并发量不要太大,API使用存在实时性不是很高的情况,如果实时性要求高建议还是用SDK。基本步骤:首先消费消息:API名称:taobao.tmc.messages.consume消息消费后,指针自动后移,下次调用自动获取到未消费过的消息,但是消费确认后的消息无法再次获取。然后确认消息:API名称:taobao.tmc.messages.confirm获取消息后,如果不确认,消息服务会选择时机重发,重发次数由消息服务控制,如果消息3天内都没有被确认将会被删除。JAVA示例代码12345678910111213141516171819TaobaoClientclient=newDefaultTaobaoClient();do{longquantity=100L;TmcMessagesConsumeResponsersp=null;do{TmcMessagesConsumeRequestreq=newTmcMessagesConsumeRequest();req.setQuantity(quantity);req.setGroupName(default);rsp=client.execute(req);20212223242526if(rsp.isSuccess()&&rsp.getMessages()!=null){for(TmcMessagemsg:rsp.getMessages()){//handlemessageSystem.out.println(msg.getContent());System.out.println(msg.getTopic());//confirmmessageTmcMessagesConfirmRequestcReq=newTmcMessagesConfirmRequest();cReq.setGroupName(default);cReq.setsMessageIds(String.valueOf(msg.getId()));TmcMessagesConfirmResponsecRsp=client.execute(cReq);System.out.println(cRsp.getBody());}}System.out.println(rsp.getBody());}while(rsp!=null&&rsp.isSuccess()&&rsp.getMessages()!=null&&rsp.getMessages().size()==quantity);Thread.sleep(1000L);}while(true);C#示例代码1234567891011121314151617181920ITopClientclient=newDefaultTopClient();do{longquantity=100L;TmcMessagesConsumeResponsersp=null;do{TmcMessagesConsumeRequestreq=newTmcMessagesConsumeRequest();req.GroupName=default;req.Quantity=quantity;21222324252627282930rsp=client.Execute(req);if(!rsp.IsError&&rsp.Messages!=null){foreach(TmcMessagemsginMessages){//handlemessageConsole.WriteLine(msg.Topic);Console.WriteLine(msg.Content);//confirmmessageTmcMessagesConfirmRequestcReq=newTmcMessagesConfirmRequest();cReq.GroupName=default;cReq.SMessageIds=msg.Id.ToString();TmcMessagesConfirmResponsecRsp=client.Execute(cReq);Console.WriteLine(cRsp.Body);}}Console.WriteLine(rsp.Body);}while(rsp!=null&&!rsp.IsError&&rsp.Messages!=null&&rsp.Messages.Count==quantity);Thread.Sleep(newTimeSpan(0,0,1));}while(true);注:通过API拉取消息的平均RT在网络好的情况下

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功