最近、私は問題を思いつきました。Camel アプリケーションで、同時に提供される接続を制限する方法。最初に私はスロットル EIP について考えましたが、それについて読んだ後、それを使用することを検討せず、それは私のニーズに合わないと結論付けました. 1 秒あたり最大 10 メッセージで構成された Throttler は、10 の要求が組み合わされて数ミリ秒で処理されたとしても、私のメッセージング システムを通過できるのはこれだけです。10 の同時接続を提供する必要があります。これは、毎秒数百のメッセージのスループットを持つことができることを意味しますが、10 接続の制限を超えることはできません。それを超えた場合は、一度に 10 を超える接続を使用することは許可されていないことを呼び出し元に例外を返さなければなりません。彼のリクエストをキューに入れることはできません。
その後、SEDA コンポーネントがまさに必要なことを実行してくれることがわかりました。10 個の parallelConsumers と 0 (ゼロ) のキュー サイズを使用すると、同時に処理される接続数が 10 に制限され、すべての新しい接続が拒否されます。問題は、Camel 2.10.3 での SEDA の動作です。「size=0」を設定すると、自動的に Integer.MAX_VALUE (jConsole で確認) が使用されます。キューを「1」に設定すると、期待どおりに機能しますが、キューをまったく持つことができません。
Camel SEDA のソース コードを検索すると、SEDA キューに LinkedBlockingQueue を使用していることがわかります。これは容量を 0 にすることはできません。したがって、デフォルトのコンストラクターが使用され、実際にはキューに Integer.MAX_VALUE が使用されます。
何か不足していますか?私の問題を解決するための他の選択肢はありますか?
どんな助けでも大歓迎です!