Java 如何运行多个T(线程)服务器?
我想在同一个程序中运行两个Java 如何运行多个T(线程)服务器?,java,thrift,Java,Thrift,我想在同一个程序中运行两个tthreadedpoolserver,以处理不同类型的请求。但是,如果客户机试图连接到最后启动的TThreadedPoolServer,它将始终拒绝连接。我已经尝试在不同的线程中运行服务器,但没有效果 服务器1: public class RERunner extends Thread { private static ReceiveEndpoint receiveEndpoint; private static ReceiveEndpointInte
tthreadedpoolserver
,以处理不同类型的请求。但是,如果客户机试图连接到最后启动的TThreadedPoolServer
,它将始终拒绝连接。我已经尝试在不同的线程中运行服务器,但没有效果
服务器1:
public class RERunner extends Thread {
private static ReceiveEndpoint receiveEndpoint;
private static ReceiveEndpointInterface.Processor<ReceiveEndpoint> masterProcessor;
public RERunner() throws TTransportException {
receiveEndpoint = new ReceiveEndpoint();
masterProcessor = new ReceiveEndpointInterface.Processor<>(receiveEndpoint);
TServerTransport transport = new TServerSocket(Elements.MASTER_SERVER_RC_ENDPOINT_PORT);
TSimpleServer server = new TSimpleServer(new TSimpleServer.Args(transport).processor(masterProcessor));
server.serve();
}
}
解决方案不必包含两个
tthreadedpoolserver
,但如果不包含,我需要帮助启动它们。我将两个*.thrift文件和其中定义的服务组合在一起,这样我就可以通过一个TThreadedServer访问这两个函数
但是,如果客户机尝试连接到最后启动的TThreadedPoolServer,则它将始终拒绝连接。我已经尝试在不同的线程中运行服务器,但没有效果
这不是(线程化)服务器的问题,而是尝试将两个服务器绑定到一个套接字时会遇到的一般问题
当您需要在同一端点上运行两个或多个服务器时,一个可能的解决方案是使用
如果较旧的客户端(未使用TMultiplexProtocol
)正在与服务器联系,则某些(并非所有)实现还提供默认服务的兼容性回退。如果实现当前不支持它,请注意,将TMultiplexProtocol
添加到现有和已发布的端点是一个突破性的更改。当在一个端点上运行多个服务时,它会派上用场。顺便说一句,你接受的答案可能会解决你的特定问题,但并不能真正回答问题,是吗?
public class RETableRunner extends Thread {
private static ReceiveEndpointTable receiveEndpointTable;
private static ReceiveEndpointTableInterface.Processor<ReceiveEndpointTable> masterProcessorTable;
public RETableRunner() throws TTransportException {
receiveEndpointTable = new ReceiveEndpointTable();
masterProcessorTable = new ReceiveEndpointTableInterface.Processor<>(receiveEndpointTable);
TServerTransport transportAll = new TServerSocket(Elements.MASTER_SERVER_RC_ENDPOINT_TABLE_PORT);
TThreadPoolServer serverAll = new TThreadPoolServer(new TThreadPoolServer.Args(transportAll).processor(masterProcessorTable));
serverAll.serve();
}
}
org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused: connect
at org.apache.thrift.transport.TSocket.open(TSocket.java:226)
at DataPropagator.acquireEndpointTable(DataPropagator.java:27)
at DataPropagator.run(DataPropagator.java:98)
Caused by: java.net.ConnectException: Connection refused: connect
at java.base/java.net.PlainSocketImpl.connect0(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.apache.thrift.transport.TSocket.open(TSocket.java:221)
... 2 more