【发布时间】:2021-12-18 06:24:13
【问题描述】:
我将 ActiveMQ 与 Java Spring 结合使用。我启用了调度程序,并且设法(以编程方式)创建了预定的作业。我还设法编写了一种基于作业 ID 删除它们的方法。我一直在使用 JmsTemplate 浏览队列,但它仅在队列有一些消息等待时才有效。队列为空时找不到作业 ID。
我的问题是我应该如何获得预定的作业 ID?
【问题讨论】:
我将 ActiveMQ 与 Java Spring 结合使用。我启用了调度程序,并且设法(以编程方式)创建了预定的作业。我还设法编写了一种基于作业 ID 删除它们的方法。我一直在使用 JmsTemplate 浏览队列,但它仅在队列有一些消息等待时才有效。队列为空时找不到作业 ID。
我的问题是我应该如何获得预定的作业 ID?
【问题讨论】:
从您的问题来看,您似乎想查看计划了哪些消息,因此您需要创建一个在名为“ActiveMQ.Scheduler.Management”的目标上发布的生产者。完成后,您创建一个新消息并设置一些属性并添加一个回复目的地,以便调度程序知道将您的消息发送到哪里。然后,您需要做的就是使用订阅该回复目的地的消费者处理消息。
Connection connection = createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create the Browse Destination and the Reply To location
Destination requestBrowse = session.createTopic(ScheduledMessage.AMQ_SCHEDULER_MANAGEMENT_DESTINATION);
Destination browseDest = session.createTemporaryQueue();
// Create the "Browser"
MessageConsumer browser = session.createConsumer(browseDest);
connection.start();
// Send the browse request
MessageProducer producer = session.createProducer(requestBrowse);
Message request = session.createMessage();
request.setStringProperty(ScheduledMessage.AMQ_SCHEDULER_ACTION,
ScheduledMessage.AMQ_SCHEDULER_ACTION_BROWSE);
request.setJMSReplyTo(browseDest);
producer.send(request);
Message scheduled = browser.receive(5000);
while (scheduled != null) {
// Do something clever...
}
其他详细信息记录在this blog post。
【讨论】: