Oracle AQ は初めてですが、私が取り組んでいるプロジェクトを本当に簡単にするはずです。
複数の永続的なサブスクライバーを持つキューを作成したいのですが、テストで、リッスンしているサブスクライバーが 2 つになるとすべてが遅くなることがわかりました。
1 人の加入者がリッスンしているときは、すべてが高速です。キューに新しいメッセージを作成すると、ほぼ瞬時にリスナーによって消費されます。
次に、別のサーバーから別のリスナーを追加します。即座に Oracle の速度が低下します。キューにメッセージを作成するのに 60 秒以上かかります。メッセージは数分後まで消費されません。
キューがマルチコンシューマーの場合、オーバーヘッドはさらに増えるのでしょうか? そのオーバーヘッドはサーバーの起動時のみですか? それとも常にそこにあるでしょうか?
シングル コンシューマ キューを使用して 2 回目のテストを実行しましたが、これらの問題は発生しませんでした。
おそらく、リスナーの設定で何か間違ったことをしたのでしょうか?
これは、キューテーブルをセットアップする方法です。
EXEC dbms_aqadm.create_queue_table(queue_table=>'MY_QUEUE_TABLE',
queue_payload_type=>'sys.aq$_jms_text_message',
multiple_consumers=>TRUE);
そして、これは私の構成です:
<jms:listener-container
connection-factory="AQjmsFactory"
container-type="default"
destination-type="durableTopic"
client-id="MY-ADAPTER"
acknowledge="transacted">
<jms:listener destination="MYA_INFO_QUEUE" ref="personUpdateListener" subscription="MYADAPTERJ"/>
<jms:listener destination="MYB_INFO_QUEUE" ref="courseUpdateListener" subscription="MYADAPTERJ"/>
</jms:listener-container>