在 Tomcat 上部署 Vert.x

Posted

技术标签:

【中文标题】在 Tomcat 上部署 Vert.x【英文标题】:Deploy Vert.x on Tomcat 【发布时间】:2016-04-05 17:13:23 【问题描述】:

我需要部署到仅支持 Tomcat 容器并且希望将 Vert.x 作为异步框架运行的 PaaS(HANA 云平台)。

到目前为止,我所做的是通过一个 servlet 引导 Vert.x:

public class VertxServlet extends HttpServlet 
...
    @Override
    public void init(ServletConfig cfg) 

        Vertx vertx = Vertx.vertx();
        vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() 
            public void handle(HttpServerRequest req) 
              System.out.println("Got request: " + req.uri());
              System.out.println("Headers are: ");
              for (Map.Entry<String, String> entry : req.headers()) 
                System.out.println(entry.getKey() + ":" + entry.getValue());
              
              req.response().headers().set("Content-Type", "text/html; charset=UTF-8");
              req.response().end("<html><body><h1>Hello from vert.x!</h1></body></html>");
            
          ).listen(8888);
    
...

在我的 web.xml 中我放了这个:

<servlet>
    <servlet-name>VertxServlet</servlet-name>
    <display-name>VertxServlet</display-name>
    <description></description>
    <servlet-class>com.mypackage.VertxServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

效果很好。问题是 PaaS 无法配置端口映射。包括反向代理在内的整个 Tomcat 都是一个准备好的解决方案。

问题:

将 Vert.x 作为.war 文件运行是否可行? 有什么限制和以后可能出现的困难吗?

有没有办法将我的小 Vert.x 服务器绑定到默认的 Tomcat 端口而不会遇到端口冲突?

谢谢

【问题讨论】:

【参考方案1】:

我找到了解决办法。有一个 HTTP 代理 Servlet,您可以轻松地将 HTTP 请求转发到 Vert.x 套接字:https://github.com/mitre/HTTP-Proxy-Servlet 它适用于 HTTP。

但是很遗憾,这个解决方案不支持网络套接字。

【讨论】:

这个问题,tomcat做代理的时候会阻塞请求线程。不阻塞请求线程是首先使用 vert.x 的主要原因之一,因为您注意到 websockets 将不起作用。因此,您将失去 vert.x 的许多 http 优势......但您是对的,这会起作用。【参考方案2】:

据我了解,在与 tomcat 相同的端口上运行时会遇到端口绑定问题。

而不是在 tomcat 中运行 vert.x,也许您应该考虑在 tomcat 前面运行 vert.x 并在请求以 tomcat 为目的地时将请求从 vert.x 代理到 tomcat。这将允许您利用 vert.x 异步处理发往 vert.x 的请求。如果你用另一种方式做,我认为你会失去一些 vert.x 的优点。如果您有额外的内存,您可能需要考虑在 2 个 jvm 上运行。

【讨论】:

感谢您的回答!我不需要 Tomcat 的任何东西,但我们需要使用 HANA 云平台(因为我们正在使用 HANA 和其他一些 HCP 好东西),目前仅支持在 Tomcat 上运行 Java。

以上是关于在 Tomcat 上部署 Vert.x的主要内容,如果未能解决你的问题,请参考以下文章

如何在windows server 2008服务器上部署tomcat环境

无法在 Apache Tomcat 6 上部署战争

在Tomcat上部署war文件

项目部署到tomcat上,tomcat能正常启动,为啥却无法访问?

如何在远程Tomcat上部署war

java项目部署在tomcat上日志走一半就不走了