Weblogic 使用队列/MDB将实时MSG优先于批处理MSG

Weblogic 使用队列/MDB将实时MSG优先于批处理MSG,weblogic,priority-queue,batch-processing,message-driven-bean,Weblogic,Priority Queue,Batch Processing,Message Driven Bean,在我的应用程序中,一个特定的服务具有恒定的带宽(例如,一次100个事务),对该服务的请求实时到达,以及批处理作业(队列)。实时请求没有统一的分布。我需要一种方法来确保在批处理作业之前首先处理实时作业,并且确保在任何时候都不超过服务的阈值 请评估以下方法 有两个队列A-实时和B-批处理作业。拥有一个大小为100(服务阈值)的线程池,并让 线程池首先尝试从A中选取MSG,如果其他线程池从B中选取MSG 我的应用程序运行在Weblogic上,我想使用MDB而不是线程池,但无法让MDB侦听多个队列。在J

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

请评估以下方法

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


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

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

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

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

10.0参考(仍然适用):