2010-07-07 15 views
12

我们构建了基于Netty/NIO的服务,我正在考虑将此服务部署到我们的生产环境中。我们的标准部署服务方式是WARs,部署在Tomcats内部。在Tomcat中托管一个Netty Server是否可行?

当我在这里提出了相同的方法时,我得到了“不应该这样做”的留言和投诉,因为Netty和Tomcat都是服务器,而“在另一台服务器上托管一台服务器没有意义” 。

对我来说,它是非常有意义的,因为它完全解决了我的部署问题,以及使我无法编写其他代码。为什么这么大“不”?

+0

你能更具体地解释你的“部署问题”以及“救了我写一些其他的代码”吗? – 2010-07-07 13:10:00

+0

@Romain - 我们的操作人员拥有脚本,可以使用WAR并将它们部署到各种tomcat,停止/启动它们等等。如果我没有将它托管在Tomcat中,而是作为独立的jar托管,那么这些脚本需要调整。 我所指的“其他代码”是通过HTTP公开服务方法 - 我们已经有了通过标准HTTP servlet来实现这一点的代码,我们现在需要重新实现它。问题是 - 将它托管在Tomcat中有什么问题? – ripper234 2010-07-07 19:08:31

+0

重新部署WAR有什么问题?好处是你有一个统一的代码片段,然后在需要时回滚。 – 2010-07-08 01:31:52

回答

16

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

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

虽然有些人可能不喜欢这种方法。理想情况下,应该有一个用于部署和管理任何应用程序(又称微内核)的通用基础架构,即使Tomcat作为模块部署,微内核也直接管理WAR,而Tomcat则可以。但是,这还有很长的路要走。

+2

我们新的公司标准是部署为战争,几乎每个应用程序都使用netty或Mina作为我们的专有协议。只需要小心关机,但目前没有大问题。现在如果netty可以为spring mvc做servlet,那么我们都会设置好。 – Jason 2011-06-04 00:37:04

1

不要在Tomcat中启动任何东西,这是非常不方便的,这有很多痛苦问题。只需将Tomcat(或Jetty)嵌入到应用程序中,并以普通的java进程运行应用程序。

+0

我在生产中使用了这种方法几次,它工作。有了maven和jenkins,它更加有趣。 – miloxe 2015-06-13 01:18:34

7

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

Tomcat有一些巨大的优势,为住房的应用程序:

  1. 守护程序脚本已经为你写的
  2. Tomcat的允许热部署(只要你不使用休眠:))
  3. 在某些情况下,您可能需要管理员用户界面或管理API
  4. 许多工具来监视Tomcat,这意味着可以监视您的应用程序。

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

相关问题