2012-01-10 112 views
2

资源分配/优先排序问题。如何优先处理不同队列中的消息?

我正在研究一个Java EE应用程序,它具有多个接收来自不同JMS队列消息的消息驱动Bean(MDB),为了简单起见我们说队列A/MDB A和队列B/MDB B.

当有高负载的系统需要优先考虑即将到来的消息在队列中,在队列B.为什么消息?上queue的消息需要尽可能快处理越好,因此MDB A需要“所有的”分贝,CPU资源等

你有关于如何解决这一个干净的方式有什么建议?不那么干净可以工作,以及...

我的生产服务器的WebSphere Application Server 7,使用的SIBus的消息传递。 WebSphere MQ可以是一个选项。

感谢您的任何建议!

+0

不是100%肯定它,但是不是JMS消息优先级应该处理那个吗? (我不确定每个队列或每个消息传递引擎是否处理优先级) – 2012-01-11 14:08:13

+0

@AviramSegal我已经假定JMS消息优先级是按每个队列处理的,但现在我有疑问了。我真的不能找到这个答案... – DagR 2012-01-11 20:52:06

+1

规范是不是很清楚,我会尽力验证你今天晚些时候 – 2012-01-12 05:40:18

回答

2

与人是在该地区的专家调查这个问题后,我得到了一些坏消息:

这可能无法做到。

使用SIB无法完成100%,您只能在单个目的地中区分消息的优先级。

关于WebSphere MQ的,似乎也不能做了,他们只为队列优先级的属性是在集群中的单个队列,我猜不会帮你的时候。

所以,可悲的是,这可能无法做到,如果你需要优先考虑你可能需要改变你的架构有点消息。 也许是一个带选择器的单个队列。然后你可以优先考虑某种类型的消息。

+0

谢谢!这是我认为没有什么大问题。我通过在队列深度达到特定队列的阈值时暂时暂停MDB来处理此问题(您可能已经猜到了http://stackoverflow.com/questions/8819169/stop-mdb-from-receiving-messages) – DagR 2012-01-13 05:28:58