在 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环境