Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单个java进程的队列/工作线程体系结构_Java_Multithreading_Queue_Jms_Message Queue - Fatal编程技术网

单个java进程的队列/工作线程体系结构

单个java进程的队列/工作线程体系结构,java,multithreading,queue,jms,message-queue,Java,Multithreading,Queue,Jms,Message Queue,我有以下问题要解决 我需要编写一个java程序: 从web服务读取JSON对象j1、j2、…、jn 对每个对象进行一些数字运算,得出j1',j2',jn' 将对象j1',j2',…,jn'发送到web服务 步骤1、2和3的计算、空间要求在任何给定时间都可能有所不同 例如: 在步骤2中处理JSON对象所需的时间可能因JSON对象的内容而异 在步骤1中,webservice生成的对象的速率可以随时间而上升或下降 步骤3中的消费web服务可能会被积压 为了解决上述设计问题,我们希望实现以下体系结构:

我有以下问题要解决

我需要编写一个java程序:

  • 从web服务读取JSON对象j1、j2、…、jn
  • 对每个对象进行一些数字运算,得出j1',j2',jn'
  • 将对象j1',j2',…,jn'发送到web服务
  • 步骤1、2和3的计算、空间要求在任何给定时间都可能有所不同

    例如:

  • 在步骤2中处理JSON对象所需的时间可能因JSON对象的内容而异
  • 在步骤1中,webservice生成的对象的速率可以随时间而上升或下降
  • 步骤3中的消费web服务可能会被积压
  • 为了解决上述设计问题,我们希望实现以下体系结构:

  • 从外部Web服务读取JSON对象并将其放置在Q
  • 一个自动调整大小的工作线程池,它使用来自Q的JSON对象并处理它们。处理后,将生成的对象放置在第二个Q上
  • 一个自动调整大小的工作线程池,它使用来自第二个Q的JSON对象将它们发送到使用Web服务
  • 问题:

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

    注:

  • 我可以使用一系列组件来解决这个问题,比如自定义队列、使用并发包的线程池——不过我正在寻找一个允许编写这样一个解决方案的解决方案
  • 这不是生活在一个容器内。这将是一个Java进程,其中入口点是publicstaticvoidmain(字符串args[])
  • 然而,如果有一个容器适合这个范例,我想了解它
  • 我可以将其分为多个过程,但是我希望它非常简单,并且在一个过程中
  • 谢谢


    谢谢。

    我不确定你的文章的最后一个问题是什么,但你有一个合理的设计概念。我要问你的一个问题是,你处在什么样的环境中?您是在JavaEE容器中还是仅仅是一个简单的独立应用程序

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

    如果在您自己的容器中,您自己管理线程池会更有意义。有了这一点,我也会考虑运行单独的应用程序,将工作从队列中删除,这将为您提供更好的缩放架构。如果有需要,您可以添加更多的机器,让更多的工人指向一个队列。

    尝试或将事情连接起来。这些是一种集成框架,将简化您与Web服务的交互。您需要做的是从WebService1->NumberCruncher->WebService2定义一个路由。这两者之间所需的路由和转换可以由框架本身处理

    您可以将cruncher实现为骆驼处理器。 并行化你的cruncher可以通过以下方式实现:;Camel有一个用于的组件。另一个备选方案是


    我想说的是,您首先来看看camel等框架背后的原则。他们创建的抽象与手头的问题非常相关。

    对此感到抱歉。。。一定是我的大脑太累了。非常感谢@Jeff,我会根据你的输入编辑这个问题并加以完善,但基本上是:1。没有集装箱2。想要保持简单:据我所知,没有任何一个一站式框架,但可以将一些框架链接在一起。你可以使用一个框架,例如用于消费和推送web服务,以及用于线程池和自动增长。嗯,@mzzzzb,你认为Twitter Storm如何符合要求?@user1172468,恐怕我对Storm一无所知。只是调查了一下,看起来很有趣,没有什么好建议的。还有一件事要学:)