时间记录:2020-04-18
问题描述:
在使用通过thrift接口文件自动生成的客户端的时候发生out of sequence response: expected %d but got %d"这样的错误,使用的是TServerClient,然后发现其的 seqid_ 会导致异常,当然这个不是异步的客户端,就会存在问题,所以我这里对其进行添加重入公平锁,以达到同步效果,使其不会报错能够正常调用。
修改如下
package com.huo.thrift;
import org.apache.thrift.TApplicationException;
import org.apache.thrift.TBase;
import org.apache.thrift.TException;
import org.apache.thrift.TServiceClient;
import org.apache.thrift.protocol.TMessage;
import org.apache.thrift.protocol.TMessageType;
import org.apache.thrift.protocol.TProtocol;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
/**
* 多线程调用时会因为seqid_的不同,然后在按其执行的结构读取的时候,会造成
* 错误,故添加重入公平锁,且重入锁对同一线程不会有什么约束,公平锁是为了保证先等待的先执行
* @author huoruilin
*/
public class ThrlServiceClient extends TServiceClient
{
public ThrlServiceClient (TProtocol prot)
{
super(prot);
}
public ThrlServiceClient (TProtocol i