我创建了一个对象" Node"有两个参数:hostName(string)和serviceList(字符串列表)。
我还写了一个管理的课程:
现在,我需要更进一步,在两个节点之间创建连接,其中一个节点使用另一个节点已注册的服务。我写了另一个名为" ArithmeticService"它包含四种简单方法,"添加" "&。减去#34; "乘"并且"划分",每个人只需在两个长点之间返回相应的操作。
public class ArithmeticServiceHandler implements ArithmeticService.Iface {
@Override
public long add(int num1, int num2) throws TException {
return num1 + num2;
}
@Override
public long multiply(int num1, int num2) throws TException {
return num1 * num2;
}
@Override
public long substract(int num1, int num2) throws TException {
return num1 - num2;
}
@Override
public long divide(int num1, int num2) throws TException {
return num1 / num2;
}
}
所以,我希望在我的测试中(用于启动)向其各自的serviceLists注册的两个节点,其中服务是ArithmeticService的一个或多个算术运算,然后一个节点请求它需要的服务,发现其他节点拥有它,与第二个节点建立连接并使用它所需的服务。
我很难理解如何建立连接,以及请求节点如何使用它要求的服务。
例如,我是否必须重写对象"节点",考虑到它必须还有变量才能使用所请求的服务?
我是否必须编写方法" useService" (第一个名字出现在我的脑海中),它返回要求的操作?
编辑:添加用于建立连接的代码
public static class ManagementServer extends Server {
public ManagementServer(int port) {
super(port);
}
}
private Server server;
private TTransport transport;
private TProtocol protocol;
private ManagementService.Client client;
public abstract static class Server implements Runnable {
private TServer tserver;
private int port;
public Server(int port) {
this.port = port;
}
public void run() {
try {
TServerSocket serverTransport = new TServerSocket(port);
ManagementService.Processor<ManagementServiceHandler> generateProcessor = new ManagementService.Processor<ManagementServiceHandler>(new ManagementServiceHandler());
tserver = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).
processor(generateProcessor));
System.out.println("Starting server on port: " + port + "...");
tserver.serve();
} catch (TTransportException e) {
e.printStackTrace();
}
}
public void start() {
new Thread(this).start();
}
public void unserve() {
tserver.stop();
}
}
@Before
public void initializeManagementServer() throws Exception {
server = new ManagementServer(7911);
server.start();
Thread.sleep(200);
transport = new TSocket("localhost", 7911);
protocol = new TBinaryProtocol(transport);
client = new ManagementService.Client(protocol);
transport.open();
}
@Test
...
...
...
@After
public void teardownManagementServer() throws Exception {
transport.close();
server.unserve();
}
}