java - 适用于 EC2 上长时间运行的进程的 Java 容器类型是什么?

标签 java spring tomcat rest amazon-ec2

我是一名长期的客户端(Swing)开发人员,并且在很长一段时间内我几乎独自从事同一份工作。在真空中在家工作,我几乎完全与社区隔离。我最近在一家初创公司担任服务器端 Java 人员,我正在学习很多东西,但我是唯一的 Java 人员,而且几乎又要靠自己了。以前从未做过服务器端 Java,所以很多东西都是全新的,我觉得我不知道正常的最佳实践是什么,或者我对使用什么工具来完成什么工作没有直观的感觉。我不断阅读各种互联网资源(太棒了!),试图增加我的知识,但有些东西似乎很难搜索,因为它们没有任何明显的关键字。希望这里的一些专家能给我指出正确的方向。

我负责实现我们的后端 REST 服务,该服务目前支持我们的网站和 iPhone 应用程序。我们正在做一个社交媒体网站,最终有许多不同的客户。目前该服务的唯一客户端是我们自己的网站和我们自己的 iPhone 应用程序。我在 Amazon EC2 平台上使用 Jersey、Spring、Tomcat 和 RDS(Amazon 的 MySQL)。我们的媒体存储是通过 S3 进行的。我很快就学会了所有这些东西,到目前为止一切都很好——网站和 iPhone 应用程序运行得很好。凉爽的。

我们的下一步是添加一些长时间运行的服务器端处理。此处理基本上是 CPU 密集型的工作,在完成之前不涉及任何通信。我正在尝试找出处理这个问题的最佳方法是什么。我正在考虑使用 Amazon 的 SQS 对作业进行排队,以响应应触发它们的 REST 事件,但我不知道应该如何处理出队和处理。我知道我需要一些线程将作业从 SQS 队列中取出并处理它们,然后告诉 REST 服务作业已完成。但这些线程位于哪里?

  1. 在另一个启动小型线程池的 EC2 实例上的普通“java -jar jobconsumer.jar”进程中。也许使用 Spring 连接这一部分并开始运行?

  2. 在部署在另一个 EC2 实例上的 Tomcat 等容器中的 Web 应用程序中?我真的不知道我会从中得到什么好处,但不知何故在这样的容器中运行似乎更稳定?这种容器是否真的支持长时间运行的处理循环,或者它只是擅长响应 HTTP 事件?

既然我这样写出来,我真的不明白为什么我想使用容器。这似乎过于复杂化了。然而,Java 社区似乎非常关注这些类型的容器化、“托管”环境,因此不使用容器似乎有些错误。我觉得我可能不明白这些容器的主要好处是什么?我的意思是,除了面向 Web 的 Servlet 和 JSP 规范的明显好处之外。这些规范的任何功能可以帮助我解决类似的问题吗?

最佳答案

对于常规 Java Web 应用程序,您几乎肯定希望使用 Servlet 容器之一,例如 Tomcat - 它负责为您接受连接、解析和序列化 HTTP 消息、JSP、SSL、身份验证等。

对于非 Web 应用程序,使用 Tomcat(或类似应用程序)的论点较弱,但仍有一些理由值得考虑:

  • 直接添加用于查询和管理应用程序的 JSP 或将来添加 Web API
  • 轻松分发版本(一个 .war 与一堆困惑的 jar 和配置文件)
  • 热部署(尽管我还没有看到有人用它来做任何严肃的事情)

就长时间运行的处理循环而言,Servlet 容器除了在应用程序启动时通知 ServletContextListener 之外不会帮助您,因此您可以启动任何长时间运行的任务。

值得注意的是,如果您已经在使用 Spring,那么使用 ContextLoaderListener 从独立应用程序切换到容器相对容易。 ,所以如果您稍后决定需要网络内容,那应该不是问题。

关于java - 适用于 EC2 上长时间运行的进程的 Java 容器类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760563/

相关文章:

java - 时区自定义显示名称

spring - 非法状态异常 : must not be null of Spock unit test with Kotlin business logic

tomcat - 如何在 Apache ODE 中记录 BPEL 流程的 SOAP 消息

linux - 在多线程 Tomcat 服务器中访问全局变量

java - 如何检查元素何时从一个类移动到另一个类

java - 反射中的父类(super class)构造函数问题

spring - 上下文如何表示

java - java spring mvc 如何显示不按 id 的另一列?

java - 如何安装三叶草etl服务器[Apache Tomcat]

java - Mysql blob 图片转换为 awt.image,然后 awt.image 转换为 blob,无需更改大小