特定のタスク (マージ) を実行するには 40 のスレッドが必要で、別のタスク (永続化) を実行するには約 20 のスレッドが必要であるという要件があります。マージには、永続化の約 5 倍の時間がかかります。この同時実行性を実現するために、メッセージ駆動型 Bean を使用しています。
次の構成で 1 つの 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 のスレッドがあることを確認するために何をする必要があるか教えてください。