【问题标题】:Concurrent processing in JAVA EEJAVA EE 中的并发处理
【发布时间】:2015-06-29 03:47:20
【问题描述】:

我正在使用 Java EE 应用程序,我希望并行执行一些 WebService。

我想知道两种不同方法的优缺点:

  1. 使用 JMS 队列和 MDB,因此我放入队列中的每条消息都会并行执行。这样,将消息放入队列的应用程序部分将有一段时间等待 MDB 在 RS 队列中做出响应。
  2. 使用 java 并发 API(未来/可调用)

添加

这是应用程序需要做的:

应用程序已经通过 MDB 完成了,但我正在考虑重构。

今天的情景:

//CALLER CLASS
FOREACH INTEGRATION
    PUT MESSAGE INTO A QUEUE AND STORE AN ARRAY OF CORRELATION_IDs
END

THREAD.SLEEP(X) // SOMETIME FOR INTEGRATION TO FINISH

WHILE (true){
    GET RESPONSE FROM THE RESPONSE QUEUE FOR EACH INTEGRATION USING THE CORRELATION PREVIOUSLY STORED
}


//MDB CLASS
HAS A HUGE SWITCH CASE THAT PROCESS EACH INTEGRATION

RETURN THE RESULT INTO THE RESPONSE QUEUE;

问题:

  1. 在java中使用并发API可以吗?在我看来,使用并发 API 将消除一层故障 (JMS)。
  2. 我的部署环境是 Websphere。使用并发 Java API 创建自己的线程是一种好习惯吗?

提前致谢

【问题讨论】:

  • 我现在把问题说得更具体了......

标签: java multithreading jakarta-ee


【解决方案1】:

jms 专家:你可以拥有持久性,你可以连接到现有的基础设施 jms 缺点:似乎很重,只能用作调度程序

手动并发缺点:嗯,它是手动的。并且并行编程很困难。一些网络服务器(尤其是云)可能会禁止创建您自己的线程

不确定您到底想做什么,但默认情况下网络服务器会并行处理请求,所以也许您不需要其他任何东西?

【讨论】:

  • 嗨@piotrek!我想并行执行不同的任务,并收集结果。我需要以编程方式进行,否则容器将按顺序处理我的代码。
【解决方案2】:

无论您采用何种解决方案,您最终都需要应对突发流量。 JMS/MDB 的突发由队列有效控制。另外要考虑的一点是队列可以持久化,因此它可以在服务器重新启动后继续存在。此外,队列可以分布在许多服务器上,从而为您提供水平可扩展性。

线程方法当然更快地开发、测试和部署。但是,我会考虑使用BlockingQueue,这样您的线程就不会乱跑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 2014-09-07
    • 2013-04-15
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多