我想制作ELB,我知道如何写,但不知道如何在不同的实例之间连接它。
例如,在两个实例上,我有一个servlet(接收获取消息)和一个下载服务器类
项目 servlet.java undertowServer.java
在服务器部分,程序从某个路径(“/ project”)接收消息,其余代码如下
public static void main(String[] args) throws Exception{
try {
DeploymentInfo servletBuilder = deployment()
.setClassLoader(Controller.class.getClassLoader())
.setContextPath(PATH)
.setDeploymentName("handler.war")
.addServlets(
servlet("Servlet", Servlet.class)
.addMapping("/")
);
DeploymentManager manager = defaultContainer().addDeployment(servletBuilder);
manager.deploy();
HttpHandler servletHandler = manager.start();
PathHandler path = Handlers.path(Handlers.redirect(PATH))
.addPrefixPath(PATH, servletHandler);
Undertow server = Undertow.builder()
.addHttpListener(9001, "localhost")
.setHandler(path)
.build();
server.start();
} catch (ServletException e) {
throw new RuntimeException(e);
}
}
一个实例听9001,另一个听9002。
此外,我在第三个实例上有一个ELB,代码是
LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient()
.addHost(new URI("http://localhost:9001"))
.addHost(new URI("http://localhost:9002"))
.setConnectionsPerThread(20);
Undertow reverseProxy = Undertow.builder()
.addHttpListener(80, "localhost")
.setIoThreads(4)
.setHandler(new ProxyHandler(loadBalancer, 30000, ResponseCodeHandler.HANDLE_404))
.build();
reverseProxy.start();
如果我写这样的代码,那就不行了。它没有找到“URL /项目”错误。但是当我直接向实例发送请求时(使用端口9001或9002),它可以工作。有什么我误解的吗?
顺便说一句,我不确定是否应该使用localhost或EC2实例的DNS