1

我有以下问题要解决。

我需要编写一个java程序:

  1. 从 Web 服务读取 JSON 对象 j1,j2,...,jn。
  2. 对每个对象进行一些数字运算以得出 j1',j2',...,jn'
  3. 将对象 j1',j2',...,jn' 发送到 Web 服务。

步骤 1、2 和 3 的计算、空间要求可以在任何给定时间变化。

例如:

  1. 在第 2 步处理 JSON 对象所需的时间可能会因 JSON 对象的内容而异。
  2. 步骤 1 中 Web 服务生成对象的速率可以随时间上升或下降。
  3. 步骤 3 中的使用 Web 服务可能会积压。

为了解决上述设计问题,希望实现以下架构:

在此处输入图像描述

  1. 从外部 web 服务读取 JSON 对象并将它们放在 Q
  2. 一个自动调整大小的工作线程池,它使用来自 Q 的 JSON 对象并处理它们。处理它们后,将生成的对象放在第二个 Q
  3. 一个自动调整大小的工作线程池,它使用来自第二个 Q 的 JSON 对象以将它们发送到使用 Web 服务。

问题:

我很好奇是否有可以用来解决这个问题的框架?

笔记:

  1. 我可以使用一系列组件(例如自定义队列、使用并发包的线程池)来解决这个问题——但是我正在寻找一种允许编写此类解决方案的解决方案。
  2. 这不会存在于容器内。这将是一个 Java 进程,其入口点是 public static void main(String args[])
  3. 但是,如果有适合这种范例的容器,我想了解它。
  4. 我可以将其拆分为多个进程,但是我想保持它非常简单并且在一个进程中。

谢谢。

谢谢。

4

2 回答 2

1

我不确定你的帖子的最终问题是什么,但你有一个合理的设计理念。我要问你的一个问题是你在什么环境中?您是在 JavaEE 容器中还是只是一个简单的独立应用程序?

如果您在一个容器中,那么让消息驱动 Bean 处理 JMS 队列比拥有一个工作线程池更有意义。

如果在您自己的容器中,您自己管理线程池会更有意义。话虽如此,我还会考虑运行单独的应用程序,将工作从队列中拉出来,这将为您带来更好的扩展架构。如果需要,您可以添加更多机器,让更多工人指向一个队列。

于 2012-10-23T18:57:39.693 回答
1

尝试使用Apache camelSpring Integration来连接。这些是一种集成框架,将简化您与 Web 服务的交互。您需要做的是定义一个从 webservice 1 -> number cruncher -> web service 2 的路由。中间需要的路由和转换可以由框架本身处理

您可以将您的 cruncher 实现为骆驼处理器。可以通过SEDA实现并行化你的 cruncher ;Camel对此模式有一个组件。另一个替代方案是AsyncProcessor

我想说你首先看看像骆驼这样的框架背后的原则。他们创建的抽象与手头的问题非常相关。

于 2012-10-23T20:54:59.890 回答