请求地址:ws://mc.api.taobao.com/
接收消息,实现方式有两种: 通过API接收消息、通过SDK接收消息
TaobaoClient client=new DefaultTaobaoClient("http://gw.api.taobao.com/router/rest","app_key","app_secret","json"); do{ longquantity=100L;//每次消费消息数量。 TmcMessagesConsumeResponse rsp=null; do{ TmcMessagesConsumeRequest req=new TmcMessagesConsumeRequest(); req.setQuantity(quantity); req.setGroupName("default"); rsp=client.execute(req); if(rsp.isSuccess()&&rsp.getMessages()!=null){ for(TmcMessagemsg:rsp.getMessages()){ //handlemessage System.out.println(msg.getContent()); System.out.println(msg.getTopic()); //confirmmessage TmcMessagesConfirmRequest cReq=newTmcMessagesConfirmRequest(); cReq.setGroupName("default"); cReq.setsMessageIds(String.valueOf(msg.getId())); TmcMessagesConfirmResponse cRsp=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(3000L); }while(true);
PHP API方式
<? include("tmcmessagesconsumerequest.php"); include("topclient.php"); include("TmcMessagesConfirmRequest.php"); //实例化TopClient类 $c=new TopClient; $c->appkey="21749834"; $c->secretKey="83d21fd8f1ba9f150c774a568deef058"; $c->gatewayUrl="http://gw.api.taobao.com/router/rest"; $c->format="json"; //实例化具体API对应的Request类 $req=new TmcMessagesConsumeRequest; $req->setQuantity(10); $resp=$c->execute($req); print_r($resp); for($i=0;$i<count($resp->messages->tmc_message);$i++) { $messages_ids.=$resp->messages->tmc_message[$i]->id.","; } $messages_ids=substr($messages_ids,0,strlen($messages_ids)-1); /* *dosomething * **/ echo$messages_ids; //确认消息 $req2=new TmcMessagesConfirmRequest; $req2->setSMessageIds($messages_ids); $resp2=$c->execute($req2); ?>
目前支持JAVA语言,其它语言建议采用API接收消息。通过SDK接收消息只需要关注业务的处理,不需要操心消息重发、确认、长连接的重连等操作,SDK会自动处理好一切。
public interface MessageHandler { /** *消息服务客户端收到消息后,会回调该方法处理具体的业务,处理结果可以通过以下两种方式来表述: <li>抛出异常或设置status.fail()表明消息处理失败,需要消息服务端重发 <li>不抛出异常,也没有设置status信息,则表明消息处理成功,消息服务端不会再投递此消息 @param message消息内容 @param status处理结果,如果调用status.fail(),消息服务将会择机重发消息;否则,消息服务认为消息处理成功 @throws Exception消息处理失败,消息服务将会择机重发消息 */ public void onMessage(Messagemessage,MessageStatusstatus)throws Exception; }
TmcClient client=new TmcClient("app_key","app_secret","default");//请求地址sdk默认已经封装 client.setMessageHandler(new MessageHandler() { public void onMessage(Message message, MessageStatus status) { try { System.out.println("============"); System.out.println(message.getContent()); System.out.println(message.getTopic()); // 默认不抛出异常则认为消息处理成功 } catch (Exception e) { e.printStackTrace(); status.fail();// 消息处理失败回滚,服务端需要重发 } } }); client.connect(); System.out.println(client.isOnline()); Thread.sleep(64000000L);