protected TServer getTThreadedSelectorServer(TNonblockingServerTransport serverTransport, TProtocolFactory protocolFactory, TProcessor processor, TTransportFactory transportFactory, InetSocketAddress inetSocketAddress) { LOG.info("starting HBase ThreadedSelector Thrift server on " + inetSocketAddress.toString()); TThreadedSelectorServer.Args serverArgs = new HThreadedSelectorServerArgs(serverTransport, conf); int queueSize = conf.getInt(TBoundedThreadPoolServer.MAX_QUEUED_REQUESTS_CONF_KEY, TBoundedThreadPoolServer.DEFAULT_MAX_QUEUED_REQUESTS); CallQueue callQueue = new CallQueue(new LinkedBlockingQueue<>(queueSize), metrics); int workerThreads = conf.getInt(TBoundedThreadPoolServer.MAX_WORKER_THREADS_CONF_KEY, serverArgs.getWorkerThreads()); int selectorThreads = conf.getInt(THRIFT_SELECTOR_NUM, serverArgs.getSelectorThreads()); serverArgs.selectorThreads(selectorThreads); ExecutorService executorService = createExecutor( callQueue, workerThreads, workerThreads); serverArgs.executorService(executorService).processor(processor) .transportFactory(transportFactory).protocolFactory(protocolFactory); return new TThreadedSelectorServer(serverArgs); }
/** * The work loop. Selects on the server transport and accepts. If there was * a server transport that had blocking accepts, and returned on blocking * client transports, that should be used instead */ public void run() { try { if (eventHandler_ != null) { eventHandler_.preServe(); } while (!stopped_) { select(); } } catch (Throwable t) { LOGGER.error("run() on AcceptThread exiting due to uncaught error", t); } finally { try { acceptSelector.close(); } catch (IOException e) { LOGGER.error("Got an IOException while closing accept selector!", e); } // This will wake up the selector threads TThreadedSelectorServer.this.stop(); } }
/** * Create the server with the specified Args configuration */ public TThreadedSelectorServer(Args args) { super(args); args.validate(); invoker = args.executorService == null ? createDefaultExecutor(args) : args.executorService; this.args = args; }
public static void main(String[] args) throws TException{ //处理器 TProcessor processor = new HelloService.Processor<HelloService.Iface>(new HelloServiceImpl()); // 传输通道 - 非阻塞方式 TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT); // 多线程半同步半异步 TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport); tArgs.processor(processor); // 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式 tArgs.transportFactory(new TFramedTransport.Factory()); //使用高密度二进制协议 tArgs.protocolFactory(new TCompactProtocol.Factory()); // 多线程半同步半异步的服务模型 TThreadedSelectorServer server = new TThreadedSelectorServer(tArgs); System.out.println("HelloTThreadedSelectorServer start...."); server.serve(); } }
options.protocolFactory(new TCompactProtocol.Factory()); options.maxReadBufferBytes = MAX_BUFFER_SIZE; dataServer = new TThreadedSelectorServer(options); LOG.info("Launching Thrift server."); dataServer.serve(); LOG.info("Thrift server exited.");
public static void startRPCServer2(leafServer leafserver , String ip , int port) throws Exception { //关联处理器leafrpc的实现 TProcessor processor = new leafrpc.Processor<leafrpc.Iface>(new RPCService(leafserver)); //传输通道,非阻塞模式 InetSocketAddress address = new InetSocketAddress(InetAddress.getByName(ip),port); TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(address,10000); //多线程半同步半异步 TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport); tArgs.processor(processor); //二进制协议 tArgs.protocolFactory(new TBinaryProtocol.Factory()); //多线程半同步半异步的服务模型 TServer server = new TThreadedSelectorServer(tArgs); LOG.info("leaf RPCServer(type:TThreadedSelectorServer) start at ip:port : "+ ip +":" + port ); server.serve(); } //TNonblockingServerSocket
public static void main(String[] args) { try { // 设置服务端口为 7777 TNonblockingServerSocket nonBlockingServerSocket = new TNonblockingServerSocket(PORT); // 关联处理器与 HelloService 服务的实现 TMultiplexedProcessor tMultiplexedProcessor = new TMultiplexedProcessor(); tMultiplexedProcessor.registerProcessor("HelloService",new HelloService.Processor(new HelloServiceImpl())); TThreadedSelectorServer.Args threadedSelectorServerArgs = new TThreadedSelectorServer.Args(nonBlockingServerSocket); TProcessorFactory processorFactory = new TProcessorFactory(tMultiplexedProcessor); threadedSelectorServerArgs.processorFactory(processorFactory); // 协议 threadedSelectorServerArgs.protocolFactory(new TCompactProtocol.Factory()); // transport threadedSelectorServerArgs.transportFactory(new TFramedTransport.Factory()); TThreadedSelectorServer server = new TThreadedSelectorServer(threadedSelectorServerArgs); log.info("server start listen on {0}...",PORT); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } }
/** * The work loop. Handles selecting (read/write IO), dispatching, and * managing the selection preferences of all existing connections. */ public void run() { try { while (!stopped_) { select(); processAcceptedConnections(); processInterestChanges(); } for (SelectionKey selectionKey : selector.keys()) { cleanupSelectionKey(selectionKey); } } catch (Throwable t) { LOGGER.error("run() on SelectorThread exiting due to uncaught error", t); } finally { try { selector.close(); } catch (IOException e) { LOGGER.error("Got an IOException while closing selector!", e); } // This will wake up the accept thread and the other selector threads TThreadedSelectorServer.this.stop(); } }
private static TServer getTThreadedSelectorServer(TProtocolFactory protocolFactory, TProcessor processor, TTransportFactory transportFactory, int workerThreads, int selectorThreads, int maxCallQueueSize, InetSocketAddress inetSocketAddress, ThriftMetrics metrics) throws TTransportException { TNonblockingServerTransport serverTransport = new TNonblockingServerSocket(inetSocketAddress); log.info("starting HBase ThreadedSelector Thrift server on " + inetSocketAddress.toString()); TThreadedSelectorServer.Args serverArgs = new TThreadedSelectorServer.Args(serverTransport); if (workerThreads > 0) { serverArgs.workerThreads(workerThreads); } if (selectorThreads > 0) { serverArgs.selectorThreads(selectorThreads); } ExecutorService executorService = createExecutor( workerThreads, maxCallQueueSize, metrics); serverArgs.executorService(executorService); serverArgs.processor(processor); serverArgs.transportFactory(transportFactory); serverArgs.protocolFactory(protocolFactory); return new TThreadedSelectorServer(serverArgs); }
private void stopServingData() { if (dataServer == null) { return; } LOG.info("Stopping data server thread."); dataServer.stop(); try { dataServerThread.join(); } catch (InterruptedException e) { LOG.error("Interrupted while waiting for data server thread to stop. Continuing.", e); } dataServer = null; dataServerThread = null; LOG.info("Data server thread stopped"); }
private static TServer getTThreadedSelectorServer(TProtocolFactory protocolFactory, TProcessor processor, TTransportFactory transportFactory, int workerThreads, int selectorThreads, int maxCallQueueSize, InetSocketAddress inetSocketAddress, ThriftMetrics metrics) throws TTransportException { TNonblockingServerTransport serverTransport = new TNonblockingServerSocket(inetSocketAddress); log.info("starting HBase ThreadedSelector Thrift server on " + inetSocketAddress.toString()); TThreadedSelectorServer.Args serverArgs = new TThreadedSelectorServer.Args(serverTransport); if (workerThreads > 0) { serverArgs.workerThreads(workerThreads); } if (selectorThreads > 0) { serverArgs.selectorThreads(selectorThreads); } ExecutorService executorService = createExecutor( workerThreads, maxCallQueueSize, metrics); serverArgs.executorService(executorService); serverArgs.processor(processor); serverArgs.transportFactory(transportFactory); serverArgs.protocolFactory(protocolFactory); return new TThreadedSelectorServer(serverArgs); }
ServerThread(TProcessor processor, int port) throws Exception { TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(port); TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport); TProcessorFactory processorFactory = new TProcessorFactory(processor); tArgs.processorFactory(processorFactory); tArgs.transportFactory(new TFramedTransport.Factory()); tArgs.protocolFactory( new TBinaryProtocol.Factory(true, true)); server = new TThreadedSelectorServer(tArgs); }
ServerThread(TProcessor processor, int port) throws Exception { TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(port); TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport); TProcessorFactory processorFactory = new TProcessorFactory(processor); tArgs.processorFactory(processorFactory); tArgs.transportFactory(new TFramedTransport.Factory()); tArgs.protocolFactory( new TBinaryProtocol.Factory(true, true)); server = new TThreadedSelectorServer(tArgs); }
.transportFactory(transportFactory) .protocolFactory(protocolFactory); tserver = new TThreadedSelectorServer(serverArgs);
public void startThreadedSelectorServer() throws TTransportException { TNonblockingServerTransport serverTransport = new TNonblockingServerSocket(this.port); TTransportFactory transportFactory = new TFramedTransport.Factory(); TProtocolFactory proFactory = new TBinaryProtocol.Factory(); final Send.Processor<Send.Iface> processor = new Send.Processor<Send.Iface>(this.handler); TThreadedSelectorServer.Args args = new TThreadedSelectorServer.Args(serverTransport); args.protocolFactory(proFactory); args.transportFactory(transportFactory); args.processor(processor); TServer server = new TThreadedSelectorServer(args); server.serve(); }
.transportFactory(transportFactory) .protocolFactory(protocolFactory); tserver = new TThreadedSelectorServer(serverArgs);
.transportFactory(transportFactory) .protocolFactory(protocolFactory); tserver = new TThreadedSelectorServer(serverArgs);
public static void main(String[] args) throws TException{ // 传输通道 - 非阻塞方式 TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT); // 多线程半同步半异步 TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport); // 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式 tArgs.transportFactory(new TFramedTransport.Factory()); //使用高密度二进制协议 tArgs.protocolFactory(new TCompactProtocol.Factory()); //设置processor工厂 TMultiplexedProcessor tprocessor = new TMultiplexedProcessor(); registerServices(tprocessor); tArgs.processorFactory(new TProcessorFactory(tprocessor)); //线程关键参数设置:最好是从配置文件中读取,方便线上修改控制 //参数默认值:selectorThreads = 2;workerThreads = 5;stopTimeoutVal = 60; tArgs.selectorThreads(selectorThreadNum);//处理请求selector线程数 tArgs.workerThreads(workerThreadNum);//工作线程数 //采用:TThreadedSelectorServer,高并发,多线程,非阻塞,必须配合TFramedTransport,适用于长连接和短链接场景,推荐总是使用 TServer server = new TThreadedSelectorServer(tArgs); System.out.println("HelloTThreadedSelectorServer start...."); server.serve(); }
args.selectorThreads(1); args.workerThreads(1); server = new TThreadedSelectorServer(args); server.setServerEventHandler(new TServerEventHandler() { @Override
.selectorThreads(numSelectorThreads); args.maxReadBufferBytes = maxReadBufferSize; TThreadedSelectorServer server = new TThreadedSelectorServer(args); return server;