package com.ikasoa.core.thrift.server.impl; import org.apache.thrift.TProcessor; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.transport.TServerTransport; import com.ikasoa.core.thrift.server.ThriftServerConfiguration; import com.ikasoa.core.utils.ObjectUtil; import lombok.NoArgsConstructor; /** * ThreadPool服务器实现 * * @author <a href="mailto:[email protected]">Larry</a> * @version 0.1 */ @NoArgsConstructor public class ThreadPoolThriftServerImpl extends AbstractThriftServerImpl { public ThreadPoolThriftServerImpl(final String serverName, final int serverPort, final ThriftServerConfiguration configuration, final TProcessor processor) { setServerName(serverName); setServerPort(serverPort); setConfiguration(configuration); setProcessor(processor); } /** * 初始化Thrift服务 * <p> * 启动Thrift服务之前必须要进行初始化. * * @param serverTransport * 服务传输类型 */ protected void initServer(TServerTransport serverTransport) { ThriftServerConfiguration configuration = getServerConfiguration(); // 使用TThreadPoolServer方式启动Thrift服务器,对每个连接都会单独建立一个线程. TThreadPoolServer.Args args = new TThreadPoolServer.Args(serverTransport) .transportFactory(configuration.getTransportFactory()) .protocolFactory(configuration.getProtocolFactory()); // 如果不设置ExecutorService,则默认使用ThreadPoolExecutor实现. if (ObjectUtil.isNotNull(configuration.getExecutorService())) args.executorService(configuration.getExecutorService()); server = new TThreadPoolServer( configuration.getServerArgsAspect().tThreadPoolServerArgsAspect(args).processor(getProcessor())); if (ObjectUtil.isNotNull(configuration.getServerEventHandler())) server.setServerEventHandler(configuration.getServerEventHandler()); } }