是的,ActiveMQ Artemis支持在最新值队列中更新预定消息。更新预定消息的方法是使用JMX MBean:
// get the scheduled MBean
ObjectInstance scheduled = artemisServer.getManagementService().getSingleObject(ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueName.toString() + ARTEMIS_SCHEDULED_SUFFIX));
// create the JMX connector
JMXConnector connector = JMXConnectorFactory.connect(jmxUrl, null);
// connect and retrieve the proxy
connector.connect();
MBeanServerConnection connection = connector.getMBeanServerConnection();
jms = JMX.newMBeanProxy(connection, scheduled.getObjectName(), ScheduledMBean.class);
// get the scheduled messages
Map scheduledMessages = jms.getScheduledMessages();
// update the message with id 12345
ScheduledMessage messageToUpdate = scheduledMessages.get(12345L);
messageToUpdate.getBodyBuffer().resetWriterIndex();
messageToUpdate.writeString("new message");
jms.removeScheduledMessage(messageToUpdate.getMessageID());
jms.addMessage(messageToUpdate.getMessageID(), messageToUpdate.getDupID(), messageToUpdate.getPriority(), messageToUpdate.getExpiration(), messageToUpdate.getScheduledDeliveryTime(), messageToUpdate.getPayload());
此示例通过创建JMX连接器连接到Artemis服务器,并使用JMX获取ScheduledMBean代理。然后,它检索计划的消息并更新ID 12345的消息。最后,它通过调用ScheduledMBean上的addMessage方法将消息添加回计划中。
上一篇:ActiveMQArtemis是否支持从ActiveMQ.Advisory.Queue中获取消息?
下一篇:ActiveMQArtemis使用了重复检测造成AMQ214019:无效配置:org.xml.sax.SAXParseException。