JAVA EE中的并发处理

时间:2015-04-21 19:28:06

标签: java multithreading java-ee

我在Java EE应用程序中工作,我希望一些Web服务并行执行。

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

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

  3. ADDED

    这是应用程序需要做的事情:

    enter image description here

    应用程序已通过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创建自己的线程是一种好习惯。
    3. 提前致谢

2 个答案:

答案 0 :(得分:0)

jms专业人士:您可以拥有持久性,可以连接到现有的基础架构 jms cons:似乎很重,只能用作调度员

手动并发缺点:好吧,它的手册。并行编程很困难。一些网络服务器(特别是云)可能会禁止创建自己的线程

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

答案 1 :(得分:0)

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

线程方法当然可以更快地开发,测试和部署。但是,我会考虑使用BlockingQueue,这样你的线程就不会运行了。