Queuing / Worker Thread architecture for a single java process
我有以下问题要解决。
我需要编写一个Java程序:
从Web服务读取json对象j1、j2、…、jn。
对每个对象进行数字运算,得出j1'、j2'、…、jn'
将对象j1'、j2'、…、jn'发送到Web服务。
步骤1、2和3的计算空间要求在任何给定时间都可能发生变化。
例如:
在步骤2中处理JSON对象所需的时间可能因JSON对象的内容而异。
步骤1中WebService生成对象的速率可以随时间上升或下降。
步骤3中的消费Web服务可能会被回溯。
要解决上述设计问题,需要实现以下体系结构:

从外部WebService读取JSON对象,并将其放置在Q上
一个自动调整大小的工作线程池,使用Q中的JSON对象并处理它们。处理完后,将生成的对象放在第二个q上
一个自动调整大小的工作线程池,使用第二个Q中的JSON对象将其发送到使用的WebService。
问题:
I am curious if there is framework which I can use to solve this problem?
笔记:
我可以使用一系列组件来解决这个问题,比如自定义队列、使用并发包的线程池——但是我正在寻找一个允许编写此类解决方案的解决方案。
这不会住在集装箱里。这将是一个Java进程,其中入口点是公共静态空隙main(字符串ARGs[])。
然而,如果有一个容器适合这个范例,我想了解它。
我可以将其分为多个进程,但是我希望将其保持在一个简单的进程中。
谢谢。
谢谢。
		
		
- 问题是?
- 抱歉…一定是我疲倦的大脑。
- NP,谢谢你的更新!
 
	 
尝试使用ApacheCamel或Spring集成来连接。这些是一种集成框架,可以简化您与Web服务的交互。您需要做的是从WebService1->NumberCruncher->WebService2定义一个路由。之间所需的路由和转换可以由框架本身处理。
您将把您的cruncher作为骆驼处理器来实现。平行化您的松脆机可以通过SEDA实现;骆驼有一个组件为这个模式。另一个替代方案是异步处理器
我要说的是,首先看一下框架(如camel)背后的原则。他们创建的抽象与手头的问题非常相关。
		
		
- 嗯,@mzzzb,你认为twitter风暴如何符合要求?
- @用户1172468,恐怕我对风暴一无所知。只是看了看,似乎很有意思,没有什么好建议的。还有一件事要学:)
 
	 
我不确定你的文章的最终问题是什么,但你有一个合理的设计概念。我有一个问题要问你,你在什么环境中?您是在一个Javaee容器中还是仅仅是一个简单的独立应用程序中?
如果您在一个容器中,那么让消息驱动的bean从JMS队列中处理比拥有一个工作线程池更有意义。
如果在您自己的容器中,您自己管理线程池会更有意义。也就是说,我还将考虑让单独的应用程序运行,从而将工作从队列中分离出来,从而为您提供更好的扩展架构。如果需要,可以添加更多的机器,让更多的工人指向一个队列。
		
		
- 非常感谢@jeff,我将根据您的输入编辑问题并对其进行改进,但基本上是:1。没有容器2。想要保持简单:一个单一的过程
- 据我所知,没有任何一站式框架,但您可以将一些框架链接在一起。您可以使用ApacheAxis这样的框架来使用和推送Web服务,使用ApacheCommons池来使用线程池并自动增长。