使用队列/ MDB优先处理批处理消息上的实时消息

时间:2012-02-01 12:36:22

标签: weblogic priority-queue batch-processing message-driven-bean

在我的应用程序中,特定服务具有恒定带宽(例如,一次100个事务),对服务的请求实时到达以及批处理作业(队列)。实时请求没有统一的分布。我需要一种方法来确保在批处理作业之前首先处理实时作业,并确保在任何时候我都不超过服务的阈值。

请评估以下方法。

有2个队列A - 实时和B - 批处理作业。有一个大小= 100(服务阈值)的线程池,并让 线程池首先尝试从A中选择msgs,如果有其他选择从B.

我的应用程序在Weblogic上运行,我想使用MDB而不是线程池,但是没有办法让MDB监听多个队列。

1 个答案:

答案 0 :(得分:0)

在JMS中,您可以设置应尽可能遵守的消息优先级。这可能是一个简单的尝试。

另一个选项可能是使用客户端在消息上设置JMS属性,并在MDB上使用消息选择器。您可以设置MY_MESSAGE_TYPE = batch / rt,然后部署多个MDB,这些MDB正在侦听同一个队列,但可以分配给不同的工作管理器。请记住,工作管理器!=线程池。您还可以设置一个请求类,以确保在批处理池正在使用时,RT池不会缺少线程/ CPU。

通过这种设计,我相信如果您有两个MDB,一个带有消息选择器,那么满足选择标准的消息应该在没有选择器(BATCH)的MDB之前通过该选择器(RT)传送到MDB。这将是一个相当简单的POC - 设置一个向队列发送消息的客户端,其中一些将JMS属性设置为RT,而其他一些则没有设置。

10.0 referece(仍然适用):http://docs.oracle.com/cd/E11035_01/wls100/config_wls/self_tuned.html