如何有效地管理一堆jar文件及其管道?

时间:2016-02-23 14:46:45

标签: java

这是一个相当高级别的问题,所以如果它是偏离主题的话,请道歉。我是企业Java世界的新手。

假设我编写了一些单独的Java包,它们可以解析数据源并将解析后的信息存储到队列中。另一个包可能从该队列中读取并将这些条目摄取到规则引擎包中。跳闸的警报被送入另一个队列,该队列由警报服务(假设它是用Python编写的)轮询,从队列中读取并发出电子邮件。

目前我必须手动运行每个jar文件并将其粘贴在后台。虽然我可能会将这些服务中的部分或全部用于恢复,或者写一些服务管理器来做同样的事情,但这让我觉得非常业余。特别是因为我必须在启动时为这个单一的工作流程启动十几项服务。

我觉得我错过了什么,但我不知道我不知道的是什么。如果没有编写一个巨大的单片应用程序,我应该考虑什么来帮助我管理所有这些分立组件并能够(从概念上)提供整体应用程序?我想最终得到某种虚拟机管理程序,我可以点击一个按钮,它启动/停止所有上述服务,为我提供一些状态可见性,并确保服务在应用时运行。

这是框架发挥作用的地方吗?我看到了其中的一些,但不知道这是否有点过分,特别是如果我没有积极开发 该框架的解决方案。

4 个答案:

答案 0 :(得分:1)

您似乎构建了一个包含大量组件的系统,然后经过一段时间后您决定聚合其中一些,因为它们碰巧共享相同的编程语言:Java。所以,首先要警告:这不是将组件连接在一起的最佳方法。

此外,您似乎不太了解Java,因为您混合了包,jar和可执行文件等完全不相关且不同概念的术语。

但是,让我们假设当前的技术水平是最好的,并且是不可改变的。您当前的要求是构建一个图形界面(我想基于HTTP / HTML)来管理用Java编写的系统的所有不同组件。我建议您使用单个JVM,将组件编写为EJB(本质上是start()stop()和查询返回自定义对象的组件状态的方法),最后用Spring连接所有内容框架,它为@Bean提供了一个很好的注释驱动配置。

SpringBoot还有一个actuator package,可以简化对象的暴露。您可能还发现将bean注册为托管bean并使用Hawtio framework管理它们(通过Jolokia代理)很有用。

答案 1 :(得分:1)

您似乎正在microservice architecture编写应用程序。

你需要一个协调者。

如果您在一台计算机上运行所有内容,那么您可能已在运行的简单协调器是systemd。您编写systemd服务描述,systemd将根据您的服务描述维护您的服务。您可以根据服务之间的依赖关系指定服务的顺序,如果服务意外关闭则重新启动策略,记录stdout / stderr等。请注意,这与运行大多数现代Linux的启动顺序的systemd相同发行版。

如果您正在运行多台计算机,您仍然可以继续使用像systemd这样的单机协调器,但通常对协调器的要求也会变得更加复杂。对于多台机器,您现在必须考虑诸如在机器之间移动服务,分阶段推出等等。对于这些设置,有一些软件可以使系统适应多机器编排,例如CoreOS' fleetd ;还有像Kubernetes这样的独立多机协调器。两者都使用docker作为应用程序容器机制。

我在这里描述的所有内容都不是特定于Java的,这意味着您可以使用与Python或其他语言或体系结构相同的Java编排。

答案 2 :(得分:1)

我不确定您是否真正使用J2EE(即Java Enterprise Edition)。也可以在J2SE中编写企业软件。 J2SE没有为此提供过多的现成可用,但相比之下,有很多微框架,如忍者,或者完整的堆栈框架,如Play框架,它们工作得很好,编程更容易,并且执行得比J2EE。

如果您不使用J2EE,那么您可以这样简单:

  • 制作一个新的Java项目
  • 将所有jar作为依赖项添加到该项目中(参见NimChimpsky对Maven的评论)
  • 只需调用构造函数
  • 即可启动jar中的类

这是一种非常天真的方法,但在这一点上可以为你服务。当然,如果你的目标是一个可扩展的平台,那么你需要先了解更多。为了扩展性,我建议玩!框架作为一个良好的开端。或者,您可以使用Vert.x,它具有自己的消息队列实现以及对高性能分布式缓存的支持。

标准的J2EE方法是可行的(并且在许多老式企业中被认为是“事实上的"”但是具有基本的 - 错误 - 或“差异”#34;这是一个非常陡峭的学习曲线和非常不可扩展的应用程序。

答案 3 :(得分:1)

您必须选择,正如Raffaele建议您可以选择将所有要求写入一个应用程序/服务。看似可能的任务,使用java Ejb或使用spring集成 - ampqTemplate(可以使用ampqTemplate写入队列并使用专用侦听器(example)接收消息。

或选择微服务架构的实现。编写一个服务,将另一个包含监听器的队列推送到队列中。这个任务可以通过spring boot轻松完成。

“一键控制它们” - 在单片应用的情况下 - 很容易。 如果您选择微服务架构。这取决于你的需求。如果它只是“开始”“停止”操作,我猜你的tomcat /其他服务器的启动和停止都会这样做。对于其他指标,有各种解决方案。再次,这取决于你的需求。