我想对activeMQ中的某个队列的消费者进行限制,在hornetq(jboss的,这是通过mdb消费者定义上的注释来实现的)。我在 activemq 的文档中找不到任何类似的内容,我找到的最接近的是这个
consumer.recvDelay 0 ms Pause consumer for recvDelay milliseconds with each message (allows consumer throttling).
from: http://activemq.apache.org/activemq-performance-module-users-manual.html
但在那里我找不到如何在java中做到这一点。
提前致谢,
Regards.
编辑:这是 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
}
}
这取决于所使用的消费者技术......但这里有一些选择
您可以在消费者代码中手动引入延迟(不是精确的科学,但这会限制吞吐量)
您还可以通过设置 JMS 连接的 maxConcurrentConsumers 属性来控制消费者使用的线程数...也就是说,这不会限制消息吞吐量,只是限制消费者使用的并发级别
-
更好的是,您可以使用节流器 EIP 实现来设置每个时间段要消耗的确切消息数量
例如,使用以下命令很简单骆驼节流器
from("activemq:queueA").throttle(10).to("activemq:queueB")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)