package com.yiqiniu.easytrans;
import java.io.Serializable;
import javax.annotation.Resource;
import com.yiqiniu.easytrans.context.LogProcessContext;
import com.yiqiniu.easytrans.protocol.EasyTransRequest;
import com.yiqiniu.easytrans.queue.producer.EasyTransMsgPublishResult;
import com.yiqiniu.easytrans.queue.producer.EasyTransMsgPublisher;
import com.yiqiniu.easytrans.rpc.EasyTransRpcConsumer;
import com.yiqiniu.easytrans.serialization.ObjectSerializer;
public class RemoteServiceCaller {
@Resource
private EasyTransRpcConsumer consumer;
@Resource
private EasyTransMsgPublisher publisher;
@Resource
private ObjectSerializer serializer;
public <P extends EasyTransRequest<R,?>,R extends Serializable> R call(String appId,String busCode,String innerMethod,P params,LogProcessContext logContext){
initEasyTransRequest(params,logContext);
return consumer.call(appId, busCode, innerMethod, params);
}
public <P extends EasyTransRequest<R,?>,R extends Serializable> void callWithNoReturn(String appId,String busCode,String innerMethod,P params,LogProcessContext logContext){
initEasyTransRequest(params,logContext);
consumer.callWithNoReturn(appId, busCode, innerMethod, params);
}
public EasyTransMsgPublishResult publish(String topic, String tag, String key, EasyTransRequest<?, ?> request,LogProcessContext logContext){
initEasyTransRequest(request,logContext);
return publisher.publish(topic, tag, key, serializer.serialization(request));
}
private void initEasyTransRequest(EasyTransRequest<?, ?> request,LogProcessContext logContext){
if(request.getParentTrxId() == null){
request.setParentTrxId(logContext.getTransactionId());
}
}
}