如何在不同的EC2实例上使用服务器来制作ELB

时间:2017-03-11 20:06:53

标签: java amazon-ec2 load load-balancing undertow

我想制作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

0 个答案:

没有答案