ActiveMQ 5.9.1 の上にジョブ キュー システムを構築しようとしています。現在、クライアント コードに qpid jms ライブラリを使用しており、activemq で AMQP 1.0 サポートを使用しています。
ジョブ キュー システムの目的のために、プリフェッチを 1 に設定できることが重要です。ジョブ ワーカーが一度に 1 つのタスクのみを取得し、コンシューマー パターンが競合するようにする必要があります。qpid ライブラリは、次の行に沿って接続ファクトリ定義を使用してこれをサポートします。
connectionfactory.activemq-amqp-manager = amqp://{user}:{password}@{hostname}:{port}?clientid=job-manager&remote-host=default&max-prefetch=1
ただし、ActiveMQ はこれを完全に無視しているようです。消費者は、activemq 管理コンソールにプリフェッチ 100 として表示されます。
さらに掘り下げて、次のソースを見つけました: org.apache.activemq.transport.amqp.AmqpProtocolConverter
次の行が含まれます。
consumerInfo.setPrefetchSize(100);
これは、AMQP 1.0 プロトコルの ActiveMQ サポートが、すべてのクライアントに対して 100 のプリフェッチ値をハードワイヤすることを意味しますか? 明らかに、これは非常に間違っています。私たちの選択肢は何ですか?純粋な JMS クライアントに切り替えることはできますが、言語の相互運用性は失われます。または、サポートする別の製品を導入することを意味する、RabbitMQ に切り替えることもできます (ActiveMQ は他の場所で既に使用されています)。