我有一个要求,我需要40个线程来执行某个任务(合并)和大约20个线程来执行另一个任务(持久性)。合并所需的时间比持久性多5倍。 我正在使用消息驱动的bean来实现这种并发。
我使用以下配置创建了一个MDB RecordMerger
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "testing/RecordMerger"),
@ActivationConfigProperty(propertyName = "maxSessions", propertyValue = "40")
})
我为持久性做了类似的事情
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "testing/RecordPersistor"),
@ActivationConfigProperty(propertyName = "maxSessions", propertyValue = "20")
})
我在tomee.xml中的配置如下
<Container id="MyJmsMdbContainer" ctype="MESSAGE">
ResourceAdapter = MyJmsResourceAdapter
InstanceLimit = 40
</Container>
记录队列的生成非常快,因此记录合并队列中总会有新元素。记录合并队列将数据放入记录持久性队列。
我面临的问题是,当记录合并已配置为使用40个线程时,我的tomee服务器不会实例化记录持久性MDB,这会导致记录堆积在该队列中。如果我将记录合并的maxSession属性减少到20,则MDB的两个开始实例化。
任何人都可以指导我需要做些什么来确保两个MDB都在运行并且记录合并有40个线程。
答案 0 :(得分:0)
您可能还需要在资源适配器定义(tomee.xml)中设置threadPoolSize = 40(默认为30)