主要类别为:
这里以API文档为例,以下是所有阿里系下软件的API文档
这里博主以机票API为说明:
一:先看适用范围,区别有 是否收费、是否授权、是否聚石塔限制
二:请求的基础目标URL
三:怎么去请求目标URL
注意这个SDK下载中的内容按照自己开通的类目有关,内容是不一样的
四:怎么对接淘宝推送过来的消息代码,记得导入SDK后使用
package com.example.jxls;
import com.alibaba.fastjson.JSON;
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.internal.tmc.Message;
import com.taobao.api.internal.tmc.MessageHandler;
import com.taobao.api.internal.tmc.MessageStatus;
import com.taobao.api.internal.tmc.TmcClient;
import com.taobao.api.internal.toplink.LinkException;
import com.taobao.api.request.TmcUserGetRequest;
import com.taobao.api.request.TmcUserPermitRequest;
import com.taobao.api.response.TmcUserGetResponse;
import com.taobao.api.response.TmcUserPermitResponse;
/**
* @program: jxls
* @description:
* @author: jcl
* @create: 2025-04-02 11:32
**/
public class testflyPig {
public static void main(String[] args) throws ApiException, LinkException, InterruptedException {
String url = "http://gw.api.taobao.com/router/rest";
String appkey = "********";
String secret = "*************";
String sessionKey = "*******";
TmcClient client = new TmcClient(appkey, secret, "default"); // 关于default参考消息分组说明
client.setQueueSize(1000); //被推送的缓冲队列 不要设置太大 避免堆积过久 导致未即时处理 导致雪崩重发
client.setThreadCount(Math.max(1, Runtime.getRuntime().availableProcessors() - 1)); //处理消息线程数
client.setMessageHandler(new MessageHandler() {
public void onMessage(Message message, MessageStatus status) {
// 注意处理时间耗时, 收到消息后若阻塞1分钟仍未处理完毕(当前onMessage函数未执行完毕), 将导致确认超时, 会导致重发消息, 请根据处理tps设置分组流控!
// 注意日志级别 主动打些日志 避免收到消息而不能断定是否收到了消息
System.out.println("receiveMsg " + message.getTopic() + " " + message.getContent() );
try {
// todo 业务处理
// xxxxxx
} catch (Exception e) {
// todo 自行记录异常信息 !!! 重要 避免排查为什么消息不确认 大部分场景是isv代码逻辑抛出异常了
System.out.println(e.getMessage());
e.printStackTrace();
// todo 若希望这条消息等会再重发一次过来 则标记消息消费失败 约6分钟后重新加入消费队列待消费
// status.fail(e.getMessage()); // 标记消息消费失败
// 重试注意:不是所有的异常都需要系统重试。
// 对于字段不全、主键冲突问题,导致写DB异常,不可重试,否则消息会一直重发
// 对于,由于网络问题,权限问题导致的失败,可重试。
// 重试时间 6分钟不等,不要滥用,否则会引起雪崩
}
}
});
//连接失败时会抛出异常, 请不要捕获, 避免未连接而不知晓, 第一次启动成功后, 后续断开会自动重连
client.connect("ws://mc.api.taobao.com");
// todo 请关注当前client需要消费消息的环境 各个环境消息隔离 但分组配置公用
// , "ws://premc.api.taobao.com/" // 预发环境 测试环境
// , "ws://mc.api.taobao.com/" // 生产环境 线上环境
System.out.println("tmc-client信息 client:" + JSON.toJSONString(client));
System.out.println("api调用地址 getApiUrl: " + client.getApiUrl());
System.out.println("tmc-client 在线状态 isOnline: " + client.isOnline());
//连接正常时 注意tmcClient实例 不能被销毁 (对象回收机制)
if(client.isOnline()) {
Thread.sleep(Long.MAX_VALUE);
}
}
private static void get(String url, String appkey, String secret) throws ApiException {
TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
TmcUserGetRequest req = new TmcUserGetRequest();
req.setFields("user_nick,topics,user_id,is_valid,created,modified");
req.setNick("testnick");
req.setUserPlatform("tbUIC");
TmcUserGetResponse rsp = client.execute(req);
System.out.println(rsp.getBody());
}
private static void permit(String url, String appkey, String secret, String sessionKey) throws ApiException {
TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
TmcUserPermitRequest req = new TmcUserPermitRequest();
req.setTopics("taobao_trade_TradeCreate,taobao_refund_RefundCreate");
TmcUserPermitResponse rsp = null;
rsp = client.execute(req, sessionKey);
System.out.println(rsp.getBody());
}
}