请求地址: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);