我有以下问题需要解决。
我需要编写一个java程序:
- 从 Web 服务读取 JSON 对象 j1,j2,...,jn。
- 对每个对象进行一些数字运算,得出 j1',j2',...,jn'
- 将对象 j1',j2',...,jn' 发送到网络服务。
步骤 1,2 和 3 的计算和空间要求可能在任何给定时间发生变化。
例如:
- 第 2 步处理 JSON 对象所需的时间可能会有所不同,具体取决于 JSON 对象的内容。
- 第 1 步中网络服务生成对象的速率可能会随着时间的推移而上升或下降。
- 第 3 步中使用的 Web 服务可能会积压。
为了解决上述设计问题,需要实现以下架构:
- 从外部 Web 服务读取 JSON 对象并将其放置在 Q 上
- 自动调整大小的工作线程池,它使用 Q 中的 JSON 对象并处理它们。处理完后,将结果对象放在第二个 Q 上
- 自动调整大小的工作线程池,它使用第二个 Q 中的 JSON 对象并将它们发送到使用的 Web 服务。
问题:
I am curious if there is framework which I can use to solve this problem?
注释:
- 我可以使用一系列组件来解决这个问题,例如使用并发包的自定义队列、线程池 - 但是我正在寻找一种允许编写此类解决方案的解决方案。
- 它不会存在于容器内。这将是一个 Java 进程,其入口点是 public static void main(String args[])
- 但是,如果有适合这种范例的容器,我想了解一下。
- 我可以将其拆分为多个进程,但我希望使其保持非常简单并在单个进程中。
谢谢。
谢谢。
最佳答案
尝试Apache camel或Spring Integration把事情连接起来。这些是一种集成框架,将简化您与 Web 服务的交互。您需要做的是定义一条从 webservice 1 -> number cruncher -> web service 2 的路由。之间所需的路由和转换可以由框架本身处理
您可以将您的cruncher实现为 Camel 处理器。 并行化你的cruncher可以通过SEDA来实现; Camel 有一个组件 this pattern 。另一个替代方案是 AsyncProcessor
我建议你先看看camel这样的框架背后的原理。他们创建的抽象与当前的问题非常相关。
关于java - 单个 java 进程的排队/工作线程架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037157/