14

我们构建了一个基于 Netty/NIO 的服务,我正在考虑将该服务部署到我们的生产环境中。我们部署服务的标准方式是作为 WAR,部署在 Tomcat 中。

当我在这里提出相同的方法时,我得到了“不应该这样做”的喊叫和抱怨,因为 Netty 和 Tomcat 都是服务器,并且“在另一个服务器上托管一个服务器没有意义”。

对我来说这很有意义,因为它完全解决了我的部署问题,并且让我免于编写其他代码。为什么会有这么大的“不不”?

4

3 回答 3

18

Tomcat 提供的动态 WAR 部署和取消部署是为 Web 应用程序设计的。您尝试部署到 Tomcat 中的 Netty 应用程序不是 Web 应用程序,而只是一个仅共享 VM 内存的单独服务器。这意味着 Tomcat 已被重新用于通用微内核,例如 OSGi。

不过,我不认为这是一个大问题。由于您的公司使用 WAR 作为标准部署机制,因此重用它可能是一个好主意。你甚至不需要编写远程关机之类的管理功能,因为 Tomcat 已经提供了它们。您需要做的就是确保在取消部署时释放所有资源。

有些人可能不喜欢这种方法。理想情况下,应该有一个通用的基础设施来部署和管理任何应用程序(又名微内核),甚至 Tomcat 也被部署为一个模块,而微内核直接管理 WAR,而不是 Tomcat。但这还有很长的路要走。

于 2010-07-08T04:14:22.540 回答
7

这很有意义。实际上,我们在 Tomcat 中运行一个 Java 电子邮件服务器。

Tomcat 在容纳应用程序方面有一些巨大的优势:

  1. 守护程序脚本已经为您编写好了
  2. Tomcat 允许热部署(只要您不使用休眠 :))
  3. 在某些时候,您可能需要 Admin UI 或 Admin API
  4. 有很多工具可以监控 Tomcat,这意味着可以免费监控您的应用程序。

现在使用 Netty、Mina 或任何事件驱动的网络技术,您将无法使用大多数 MVC 框架。事实上,您将无法使用大多数 Java 企业框架,因为很多事情都依赖于每个请求的线程(事务、安全等)。

于 2012-01-17T14:29:37.137 回答
1

不要在Tomcat中启动任何东西,这很不方便,而且这有很多痛苦的问题。只需将 Tomcat(或 Jetty)嵌入到您的应用程序中,然后将您的应用程序作为纯 java 进程运行。

于 2011-05-06T22:11:43.647 回答