我有一个JAVA应用程序,我需要清除创建消费者的所有排队消息 .
我有下一个代码:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(messageBrokerUrl);
try {
connection = connectionFactory.createConnection();
connection.start();
this.session = connection.createSession(this.transacted, ackMode);
Destination adminQueue = this.session.createQueue(messageQueueName);
this.replyProducer = this.session.createProducer(null);
this.replyProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//Set up a consumer to consume messages off of the admin queue
MessageConsumer consumer = this.session.createConsumer(adminQueue);
consumer.setMessageListener(this);
} catch (JMSException e) {
log.error("Error al configurar servicio de colas MQ. " + e.getMessage());
}
如何清除排队的邮件然后创建使用者,以防止排队的邮件被处理 .
1 回答
JMS API没有用于清除目标的已定义方法,因此除了在目标上创建使用者以及读取之前,使用JMS API单独执行此操作是不可能的,直到您使用
consumer.receive(1000)
或类似的连续调用得不到任何回复 .如果您不介意直接使用ActiveMQ对象,则可以尝试在ActiveMQConnection中使用
destroyDestination
方法 . 此方法将从代理中删除目标 IF 该目标上没有活动订阅者 .否则,您将使用ActiveMQ代理公开的JMX API来实际清除相关目标 .