Thrift 端口监听问题 java
环境: linux centos 6.5 + apache
将thrift server 部署到 linux tomcat 启动 过段时间后 thrift 的端口 失去监听
不知道有没有大神遇到过这个问题
代码入下:
public class ThriftService3 {
private TServer server;
public void init(int port, TProcessor processor) {
try {
// 传输通道 - 非阻塞方式
TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(port);
TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);
tArgs.processor(processor);
tArgs.transportFactory(new TFramedTransport.Factory());
// 二进制协议
tArgs.protocolFactory(new TBinaryProtocol.Factory());
tArgs.selectorThreads(2);
ExecutorService pool = Executors.newFixedThreadPool(3);
tArgs.executorService(pool);
// 多线程半同步半异步的服务模型
server = new TThreadedSelectorServer(tArgs);
} catch (TTransportException e) {
e.printStackTrace();
}
}
public void init(int port, Map<String, TProcessor> processorMap) {
try {
// 传输通道 - 非阻塞方式
TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(port);
TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);
TMultiplexedProcessor processor = new TMultiplexedProcessor();
Set<String> keys = processorMap.keySet();
for (String key : keys) {
TProcessor pro = processorMap.get(key);
processor.registerProcessor(key, pro);
}
tArgs.processor(processor);
tArgs.transportFactory(new TFramedTransport.Factory());
// 二进制协议
tArgs.protocolFactory(new TBinaryProtocol.Factory());
// 多线程半同步半异步的服务模型
int num = Runtime.getRuntime().availableProcessors() * 2 + 1;
tArgs.selectorThreads(num);
tArgs.workerThreads(num * 10);
server = new TThreadedSelectorServer(tArgs);
} catch (TTransportException e) {
e.printStackTrace();
}
}
public void start() {
server.serve(); // 启动服务
}
public void destory() {
server.stop();
}
public boolean isServing() {
return server.isServing();
}
public static void main(String[] args) throws UnknownHostException, IOException {
Socket so = new Socket("115.159.147.94", 19526);
so.close();
}
}
启动方法:
public ThriftService3 server3;
public void startThriftLinsten3() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
int port = 19528;
server3 = new ThriftService3();
TProcessor tprocessor = new TeamService.Processor<>(new TeamServiceImpl());
server3.init(port, tprocessor);
server3.start();
}
});
t.setName("team thrift thread3");
t.start();
}