淘寶消息服務使用介紹_第1頁
淘寶消息服務使用介紹_第2頁
淘寶消息服務使用介紹_第3頁
淘寶消息服務使用介紹_第4頁
淘寶消息服務使用介紹_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、消息服務使用介紹更新時間:2016/03/24 訪問次數(shù):229642· From淘寶消息服務使用· To淘寶消息服務使用· 常用消息類型說明· 沙箱消息服務開通· 消息服務常見問題消息服務是開放平臺為提高應用API調(diào)用效率而推出的一種主動推送服務( From淘寶 ),推送內(nèi)容包括(淘寶交易、商品、退款等信息),基于該推送服務,應用獲取淘寶數(shù)據(jù)不需再不停輪詢API,僅需在接收到淘寶推送的消息時調(diào)用API獲取即可,大大提高API調(diào)用效率和降低API使用費用。同時還提供消息回流服務( To淘寶 ),

2、應用可將信息回流到淘寶,做商品數(shù)源服務等。From淘寶:即淘寶向外推送淘寶(包括天貓)的交易、商品、退款等官方消息。To淘寶:即向淘寶回流消息。那么如何使用消息服務呢? 請看以下是消息服務 From淘寶 和 To淘寶 兩種方式的詳細使用說明。From淘寶消息服務使用應用訂閱消息進入ISV控制臺,在“應用管理->消息服務->訂閱消息”頁面,選擇需要的消息進行訂閱,點擊相應消息后面的“訂閱”即可訂閱消息成功,可以在“我的訂閱”中查看已經(jīng)成功訂閱的消息。如果需要取消消息的訂閱,直接點擊 “取消訂閱”。點擊消息名稱可以查看每個消息返回的詳細字段信息。注意:如果該消息沒有權(quán)限,則說明應用未開

3、通相關(guān)API調(diào)用權(quán)限,通過點擊“申請權(quán)限”,進入申請相應的權(quán)限包。另如果需要在沙箱開通消息服務使用,可參照本文的沙箱消息服務開通章節(jié)給用戶開通消息調(diào)用taobao.tmc.user.permit接口給用戶(即淘寶或天貓商家)開通,可以選擇只給用戶開通部分消息類型,也可全部開通。具體可看該API 入?yún)⒄f明。備注:· 給用戶開通消息前提是用戶已經(jīng)給應用授權(quán),如未授權(quán),請參考獲取用戶授權(quán)說明。· 取消用戶的消息服務調(diào)用taobao.tmc.user.cancel接口。· 可以通過接口taobao.tmc.user.get獲取用戶已開通消息,入?yún)⒈仨気斎雐s_valid,

4、topics,modified來判斷用戶授權(quán)消息是否成功· 消息服務API文檔:點擊這里查看代碼實現(xiàn)接收消息正式環(huán)境服務地址:ws:/沙箱環(huán)境服務地址:ws:/接收消息,實現(xiàn)方式有兩種: 通過SDK接收消息 、 通過API接收消息 ,推薦采用SDK接收消息。通過SDK接收消息目前支持JAVA與.NET語言,其它語言建議采用API接收消息。通過SDK接收消息只需要關(guān)注業(yè)務的處理,不需要操心消息重發(fā)、確認、長連接的重連等操作,SDK會自動處理好一切。JAVA接口使用說明123456789101112131415public interface Me

5、ssageHandler      /*     * 消息通道客戶端收到消息后,會回調(diào)該方法處理具體的業(yè)務,處理結(jié)果可以通過以下兩種方式來表述:     * <ul>     * <li>拋出異?;蛟O置status.fail()表明消息處理失敗,需要消息通道服務端重發(fā)     * <li>不拋出異常,也沒有設置s

6、tatus信息,則表明消息處理成功,消息通道服務端不會再投遞此消息     *      * param message 消息內(nèi)容     * param status 處理結(jié)果,如果調(diào)用status.fail(),消息通道將會擇機重發(fā)消息;否則,消息通道認為消息處理成功     * throws Exception 消息處理失敗,消息通道將會擇機重發(fā)消息   

7、60; */    public void onMessage(Message message, MessageStatus status) throws Exception; JAVA使用代碼示例12345678910111213TmcClient client = new TmcClient("app_key", "app_secret", "default"); / 關(guān)于default參考消息分組說明client.setMessageHandler(new Messag

8、eHandler()     public void onMessage(Message message, MessageStatus status)         try             System.out.println(message.getContent();      

9、0;     System.out.println(message.getTopic();         catch (Exception e)             e.printStackTrace();           

10、60;status.fail(); / 消息處理失敗回滾,服務端需要重發(fā)            );client.connect("ws:/"); / 消息環(huán)境地址:ws:/注: 采用Java main方法在Eclipse里面運行上面的代碼測試時,請在client.connect()后面加上Thread.sleep讓main線程等待一段 時間結(jié)束,以便觀察消息的實時接收情況,否則main線程結(jié)束后,TMC長連接也會跟著斷開。如果是在web服務器上運行上面的

11、代碼,則不用在 client.connect()后面加任何Thread.sleep代碼,也不需要在外面包一層while(true)循環(huán),因為web服務器上的主線 程只要服務器不關(guān)閉都是不會結(jié)束的,TMC的長連接會一直保持。C#使用示例代碼12345678910111213141516TmcClient client = new TmcClient("appkey", "appsecret", "default"); / 關(guān)于default參考消息分組說明client.OnMessage += (s, e) => 

12、60;  try            Console.WriteLine(e.Message.Topic);        Console.WriteLine(e.Message.Content);        / 默認不拋出異常則認為消息處理成功    

13、    catch (Exception exp)            Console.WriteLine(exp.StackTrace);        e.Fail(); / 消息處理失敗回滾,服務端需要重發(fā)    client.Connect("ws:/ / 消息環(huán)境地址:ws:/注: 采用C# Ma

14、in方法在VS控制臺工程里面運行上面的代碼測試時,請在client.Connect后面加上Console.Read()或 Thread.Sleep讓main線程暫時不結(jié)束,以便觀察消息的實時接收情況,否則Main線程結(jié)束后,TMC長連接也會跟著斷開。如果是在IIS服 務器或C#應用程序里面運行上面的代碼,則不用在client.Connect后面加任何等待的代碼,也不需要在外面包一層while(true)循環(huán),只要保持IIS服務器或C#應用程序不關(guān)閉,TMC的長連接會一直保持。通過API接收消息提供API接收消息的目的是那種對多線程和長連接處理不方便的語言使用的,比如PHP、Python,這些語

15、言官方暫時沒有提供SDK,可以通過下面兩個API配合使用也能達到接收和確認消息的目的。 推薦盡量用SDK方式,如果必須使用API,建議調(diào)用taobao.tmc.messages.consume接口時盡量不要并發(fā)或并發(fā)量不要太大,API使用存在實時性不是很高的情況,如果實時性要求高建議還是用SDK?;静襟E:· 首先消費消息:API名稱:taobao.tmc.messages.consume消息消費后,指針自動后移,下次調(diào)用自動獲取到未消費過的消息,但是消費確認后的消息無法再次獲取。· 然后確認消息:API名稱:taobao.tmc.messages.confirm獲取消息后

16、,如果不確認,消息服務會選擇時機重發(fā),重發(fā)次數(shù)由消息服務控制,如果消息3天內(nèi)都沒有被確認將會被刪除。JAVA示例代碼1234567891011121314151617181920212223242526TaobaoClient client = new DefaultTaobaoClient(" "app_key", "app_secret", "json");do     long quantity = 100L;    TmcMessages

17、ConsumeResponse rsp = null;    do         TmcMessagesConsumeRequest req = new TmcMessagesConsumeRequest();        req.setQuantity(quantity);        req.setGroup

18、Name("default");        rsp = client.execute(req);        if (rsp.isSuccess() && rsp.getMessages() != null)             for (TmcMessage msg :

19、rsp.getMessages()                 / handle message                System.out.println(msg.getContent();      &#

20、160;         System.out.println(msg.getTopic();                / confirm message                

21、;TmcMessagesConfirmRequest cReq = new TmcMessagesConfirmRequest();                cReq.setGroupName("default");                cRe

22、q.setsMessageIds(String.valueOf(msg.getId();                TmcMessagesConfirmResponse cRsp = client.execute(cReq);                System.ou

23、t.println(cRsp.getBody();                            System.out.println(rsp.getBody();     while (rsp != null && rsp.isSuccess() &am

24、p;& rsp.getMessages() != null && rsp.getMessages().size() = quantity);    Thread.sleep(1000L); while (true);C#示例代碼123456789101112131415161718192021222324252627282930ITopClient client = new DefaultTopClient(" "app_key", "app_secret", "json

25、");do    long quantity = 100L;    TmcMessagesConsumeResponse rsp = null;    do            TmcMessagesConsumeRequest req = new TmcMessagesConsumeRequest();   

26、60;    req.GroupName = "default"        req.Quantity = quantity;        rsp = client.Execute(req);        if (!rsp.IsError && rsp.Messages !=

27、null)                    foreach (TmcMessage msg in Messages)                       &

28、#160;    / handle message                  Console.WriteLine(msg.Topic);                Console.WriteLine(msg.Conte

29、nt);                / confirm message                  TmcMessagesConfirmRequest cReq = new TmcMessagesConfirmRequest();  

30、60;             cReq.GroupName = "default"                cReq.SMessageIds = msg.Id.ToString();        &#

31、160;       TmcMessagesConfirmResponse cRsp = client.Execute(cReq);                Console.WriteLine(cRsp.Body);            &#

32、160;               Console.WriteLine(rsp.Body);     while (rsp != null && !rsp.IsError && rsp.Messages != null && rsp.Messages.Count = quantity);    Thread.Sleep

33、(new TimeSpan(0, 0, 1); while (true);注:通過API拉取消息的平均RT在網(wǎng)絡好的情況下能達到10毫秒左右,每次消費得到的消息為空時,務必暫停至少1秒才去執(zhí)行下一次循環(huán)拉取消息,否則會產(chǎn)生很多無謂的請求,白白浪費服務端的資源,以及應用自身的API流量包。消息分組使用介紹用戶數(shù)量很大需要多臺機器組成一個集群來接收消息,或者對商家進行隔離獨立接收消息的時候。不管是SDK還是API都可以通過多連接接收消息。消息服務支持多連接有兩種方式:、創(chuàng)建多個用戶分組,每個用戶分組建立一個連接。、同一個分組建立多個連接· 創(chuàng)建分組:調(diào)用接口taobao.tmc.grou

34、p.add創(chuàng)建自定義分組。注:消息服務會為應用創(chuàng)建一個default分組,沒有分配到指定分組【group】的用戶都屬于default分組,通過SDK或API消費消息時,如果不指定分組,就表示采用默認分組連接。· 刪除分組:調(diào)用接口taobao.tmc.group.delete刪除指定的分組或分組下的用戶。注:每個應用最多創(chuàng)建50個分組,每個分組用戶數(shù)不限。To淘寶消息服務使用訂閱數(shù)據(jù)回傳消息在應用管理后臺,點擊“訂閱消息”,如果該消息沒有權(quán)限,則通過點擊“申請權(quán)限”,進入申請相應的增值包代碼實現(xiàn)推送消息對于消息的回傳,有兩種方式: 通過API發(fā)布消息 、 

35、;通過SDK發(fā)布消息 ,推薦采用API發(fā)布消息。通過API發(fā)布消息具體使用說明,請參考API文檔:duce通過SDK發(fā)布消息(不推薦)目前支持JAVA與.NET語言,其它語言建議采用API發(fā)布消息。JAVA代碼示例12345TmcClient client = new TmcClient("app_key", "app_secret", "default");client.connect("ws:/for (int i = 0; i < 10; i+)  

36、   client.send("helloworld-topic", "helloworld-content", "session_key");C#代碼示例123456TmcClient client = new TmcClient("app_key", "app_secret", "default");client.Connect("ws:/for (int i = 0; i < 10; i+)   

37、; client.Send("helloworld-topic", "helloworld-content", "session_key");常用消息類型說明平臺已經(jīng)提供結(jié)構(gòu)化的消息說明文檔,點擊這里進入消息文檔,您也可以進入控制臺的消息服務里面進行訂閱和取消訂閱。沙箱消息服務開通一、訪問二、選擇沙箱測試工具-消息通道管理輸入沙箱apppkey訂閱消息【沙箱測試以測試商品庫存修改為例訂閱taobao_item_ItemStockChanged】三、沙箱獲取SessionKey快捷操作,輸入沙箱AppKey點擊搜索獲取Sess

38、ionKey。如下圖表示sandbox_c_1授權(quán)1021719331這個應用可以獲取它的數(shù)據(jù),授權(quán)碼為SessionKey對應的值。然后再調(diào)用taobao.tmc.user.permit接口表示授權(quán)1021719331接收它的消息。四、代碼運行(請求到ws:/ 賣家中心 修改庫存測試驗證。消息服務常見問題什么是分組,是否需要分組消息分組是用戶消息隔離的一種方式,組內(nèi)用戶的消息只會發(fā)送到相同組名的連接上。同一個組支持多個連接,同一組的消息,隨機發(fā)送到組內(nèi)的某一個連接。如果要用戶的類型對消息區(qū)別對待,比如優(yōu)先保證付費用戶,然后再保證免費用戶,就可以通過消息分組來接收不同用戶的消息。每個應用最多創(chuàng)

39、建50個分組,每個分組用戶數(shù)不限。什么是多連接接收消息,如何建立多個連接多連接收消息是指同一分組內(nèi)ISV服務器與TOP的消息服務器建立多個連接來收消息。多鏈接是對同一個分組而言,消息在下發(fā)時隨機選擇從分組內(nèi)的多個連接中選擇一個連接下發(fā)消息。多鏈接有的隨機下發(fā)消息的功能,可以用同一分組多連接來實現(xiàn)集群,負載功能。建立多鏈接只需要用相同的代碼重新啟動一個TmcClient實例??稍谕粋€ISV服務器上,也可在不同的ISV服務器上,建立同一個分組的多鏈接。什么情況下使用多連接消息服務的服務端有消息堆積的功能,它看的是你客戶端的處理能力,只要能處理他就給你發(fā),處理不了就堆積在服務端,一般情況下不需要建

40、立多連接,單個連接就能把機器的網(wǎng)卡跑滿。新消息服務的多連接,更多的是應用在用戶分組,或者做集群部署的場景下。消息重發(fā)邏輯是怎么樣的對 于斷開連接(如應用掛了)情況,服務端會堆積消息,等應用重新連接進來后,再把堆積的消息順序推送給客戶端。一條消息從誕生開始,如果應用一直不接收,服 務端最長保留時間為3天,超過3天會自動清除。對于連接正常,但消息處理失敗的情況,服務端會最快隔10分鐘進行第一次重發(fā),如果應用一直處理失敗,服務 端會一直定時重發(fā),直到消息被清理為止。PHP中json_decode整形溢出問題PHP 5.3版本以下,json_decode依賴于操作系統(tǒng)的位數(shù)來解釋數(shù)字,在32位系統(tǒng)上最

41、大只支持232的數(shù)字解釋,在64位的系統(tǒng)上最大支持 264的數(shù)字的解釋。由于消息服務的消息ID超過32位系統(tǒng)的最大值,如果沒有升級到PHP 5.3版本以上,就會由于確認了錯誤的消息ID,導致消息重復投遞。解決方案是:1. 升級PHP到5.3以上;2. 把應用部署到64位的系統(tǒng)上;3. 把JSON消息里面的數(shù)字通過正則等手段替換為字符串。消息的斷開和心跳測試客戶端要直接斷開消息:TmcClient.close(); 心跳測試是否正常連接:TmcClient.isOnline();天貓退款和淘寶退款的區(qū)別天貓退款只包含天貓的訂單,淘寶退款包含淘寶和天貓的訂單,不過天貓退款的狀態(tài)有豐富一點,多了一些

42、過程。如果用不到,建議用淘寶退款消息就可以了,如果需要,需要申請?zhí)熵埻丝預PI權(quán)限,申請后即可開通。消息服務會有延時嗎為用戶開通消息服務taobao.tmc.user.permit后需要10秒才能生效。使用中消息基本沒有延遲,都會在1秒內(nèi)收到。如果有消息堆積或者程序處理不及時,就會有延時。延時時間與程序處理能力有關(guān)。為用戶取消消息服務taobao.tmc.user.cancel后1秒內(nèi)生效,取消后,堆積的消息會繼續(xù)發(fā)送,新的消息不會發(fā)送。商品消息message.getContent()中的nick為空正常嗎?我怎么判斷該消息屬于哪個店鋪?商品消息中,是有nick為空的情況的。可以用個外層獲取到message.getUserNick()或message.getUserId()。消息服務,用戶到期了,消息還會不會收到?消息服務推送的判斷有兩個條件:1、是用戶授權(quán)是否在有效期內(nèi);2、是用戶有沒有開通消息服務(toabao.tmc.user.permit)。只有二者同時滿足才會推送。相反如果用戶授權(quán)到期就不會推送。另外用戶授權(quán)到期一個月以內(nèi),用戶的開通關(guān)系還會保存,一個月以后會清除。如果在一個月以內(nèi)用戶重新授權(quán),就不需要重新為用戶開通消息服務。獲取消息后,如果不確認,消息服務會選擇時機重發(fā),重發(fā)次數(shù)由消息服務控制,目前會重發(fā)多少次

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論