单java进程的多线程队列/工作线程体系结构
我有以下问题要解决
我需要编写一个java程序:
- 读取JSON对象j1,j2,。。。,来自web服务的jn李>
- 对每个对象进行一些数字运算,得出j1',j2',。。。,jn'
- 发送对象j1',j2',。。。,jn’到web服务李>
步骤1、2和3的计算、空间要求在任何给定时间都可能有所不同
例如:
- 根据JSON对象的内容,在步骤2中处理JSON对象所需的时间可能会有所不同李>
- 在步骤1中,webservice生成的对象的速率可以随时间而上升或下降李>
- 步骤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(字符串args[])
- 然而,如果有一个容器适合这个范例,我想了解它李>
- 我可以将其分为多个过程,但是我希望它非常简单,并且在一个过程中李>
谢谢
谢谢
# 1 楼答案
试着Apache camel或Spring Integration把事情联系起来。这些是一种集成框架,将简化您与Web服务的交互。您需要做的是从webservice 1定义一个路由;数字运算器->;网络服务2。这两者之间所需的路由和转换可以由框架本身处理
你可以将你的cruncher实现为骆驼处理器。 并行化你的cruncher可以通过SEDA实现;Camel有一个用于this pattern的组件。另一个备选方案是AsyncProcessor
我想说的是,你首先来看看camel等框架背后的原则。他们创建的抽象与手头的问题非常相关