4

hornetqのactiveMQのキューのコンシューマーにスロットルを実行したい(jbossの場合、これはmdbコンシューマーの定義にアノテーションを付けて行います)。activemqのドキュメントで類似のものを見つけることができません。私が見つけた最も近いものはこれでした

consumer.recvDelay   0 ms    Pause consumer for recvDelay milliseconds with each message (allows consumer throttling).

差出人:http ://activemq.apache.org/activemq-performance-module-users-manual.html

しかし、Javaでそれを行う方法を見つけることができません。

前もって感謝します、

よろしく。

編集:ActiveMQManagerコードとコンシューマーコードは次のとおりです。

public class ActiveMQManager {

    private static ActiveMQConnectionFactory CONNECTION_FACTORY;

    public static Connection CONNECTION;

    public static Session SESSION;

    public static Destination TEST_QUEUE;

    public static void start() {
        try {

            CONNECTION_FACTORY = new ActiveMQConnectionFactory("vm://localhost");

            CONNECTION = CONNECTION_FACTORY.createConnection();
            CONNECTION.start();

            SESSION = CONNECTION.createSession(false,
                    Session.CLIENT_ACKNOWLEDGE);

            TestClient testClient = new TestClient();

            TEST_QUEUE = SESSION.createQueue("TEST.QUEUE");

            MessageConsumer testConsumer = SESSION.createConsumer(TEST_QUEUE);
            test.setMessageListener(testClient);

        } catch (Exception e) {
        }
    }

    public static void stop() {
        try {
            // Clean up
            SESSION.close();
            CONNECTION.close();
        } catch (JMSException e) {
            log.error(e);
        }
    }
}

コンシューマーコードは非常に単純です(この例の場合):

public class TestConsumer implements MessageListener {

    @Override
    public void onMessage(Message message) {
        //Do something with the message
    }

}
4

3 に答える 3

7

これは使用されている消費者向けテクノロジーによって異なります...しかし、ここにいくつかのオプションがあります

  • コンシューマーコードに手動で遅延を導入することができます(正確な科学ではありませんが、これによりスループットが制限されます)

  • また、JMS接続のmaxConcurrentConsumersプロパティを設定することで、コンシューマーが使用するスレッドの数を制御することもできます...つまり、これはメッセージスループットを抑制せず、コンシューマーが使用する同時実行性のレベルを制限するだけです。

  • さらに良いことに、スロットルEIP実装を使用して、期間ごとに消費するメッセージの正確な数を設定できます。

    たとえば、これはCamelThrottlerを使用すると簡単です

    from("activemq:queueA").throttle(10).to("activemq:queueB")

于 2013-01-23T03:56:17.947 に答える
3

ActiveMQを使用すると、コンシューマーのプリフェッチ制限を設定できます:http: //activemq.apache.org/what-is-the-prefetch-limit-for.html

構成するには、接続URL(ほとんどの構成はURLを使用して実行できます)またはJavaAPIを使用できます。

より興味深いパラメーターについては、http://activemq.apache.org/connection-configuration-uri.htmlを参照してください。

于 2013-01-18T18:37:03.093 に答える
1

Camel Throttlerは、Throttlerによってブロックされている間、交換をメモリ内に保持することを考慮に入れてください。したがって、100個のキューコンシューマーがあり、サーバー(SOAPサービスの公開)が遅い場合、最大100個の交換がメモリ内にある可能性があります。

この質問を投稿しました:ActiveMQキューをリッスンしているすべてのJMSコンシューマーのスロットル消費率

于 2016-05-26T11:35:38.633 に答える