@yanglfyangl
2018-05-30T11:46:44.000000Z
字数 1839
阅读 508
- 主要是为了更有效的提高调用第三方的效率。(一般调用第三方都需要秒级的返回,所以通过强制异步的方式来降低业务端等待造成的并发上不去的问题)
- 内部封装okHttp框架。
- 利用Redis/队列 的发布订阅机制来最大化的降低对服务器性能的影响。
需要支持的功能主要有:
- 账号、Token等管理;
- 支持异步调用;
- 支持批量调用;
- 方便的参数设置;
- 支持资源调度。
- 调用数量控制。(很多调用第三方都有限制的,超过限制会报错)
对于资源调度、安全策略、调用数量等,可以放到后期再来支持。
如果使用队列的话
也可以直接使用Spring Boot 或 Dubbo的异步模式;
// 这样不需要每个人都知道各种token等信息,由服务端统一管理
Class QueryType {
RongYun
QiNiu
...
}
interface QueryCallBack{
void onSucess(RespondData);
void onError(RespondError);
}
class ThirdQueryReuqst:{
public boolean ;
public QueryType queryType;
public void addPara(String key, String value);
public void resetPara();
}
class ThirdQueryClient:{
public ThirdQueryClient init(...);
//将request放进去,返回一个RequestID,可以用这个ID来做判断。
public String putRequst(ThirdQueryReuqst request);
//返回对应的requestID 列表。
public List<String> putRequsts(List<ThirdQueryReuqst> list);
public Boolean startExcute(QueryCallBack callback);
public void stop();
}
服务端
class ThirdQueryService:{
}
List<String, Object> requestList;
ThirdQueryClient client;
client.init(QueryType.RongYun);
client.asyncExcute(new QueryCallBack(){
void onSucess(RespondData){
String requestID = RespondData.requestID();
data = requestList.get(requestID)
拿着数据进行处理
...
...
requestList.remove(requestID);
}
void onError(RespondError){
String requestID = RespondData.requestID();
data = requestList.get(requestID)
拿着数据进行处理
...
...
requestList.remove(requestID);
}
});
//下面的方法可以在任何方法中做;
ThirdQueryReuqst request = new ThirdQueryReuqst(QueryType.RongYun);
String requestID = client.putRequst(request);
requestList.push(requestID, Data); //data可以是asyncFuture等。