ActiveMQ上的JMS消息持久性
我需要确保在使用者失败时重新交付JMS消息 现在设置生产者的方式-DefaultJmsListenerContainerFactory和Session.AUTO_ 我正在尝试构建一个jar,并尝试在这里将消息保存到服务器中,一旦应用程序能够消费,jar中的生产者将向应用程序生成消息 这是一个好方法吗?!有没有其他方法/建议来改进这一点ActiveMQ上的JMS消息持久性,jms,activemq,Jms,Activemq,我需要确保在使用者失败时重新交付JMS消息 现在设置生产者的方式-DefaultJmsListenerContainerFactory和Session.AUTO_ 我正在尝试构建一个jar,并尝试在这里将消息保存到服务器中,一旦应用程序能够消费,jar中的生产者将向应用程序生成消息 这是一个好方法吗?!有没有其他方法/建议来改进这一点 public void handleMessagePersistence(final Object bean) { ObjectMapper mapp
public void handleMessagePersistence(final Object bean) {
ObjectMapper mapper = new ObjectMapper();
final String beanJson = mapper.writeValueAsString(bean); // I might need to convert to xml instead
// parameterize location of persistence folder
writeToDriver(beanJson);
try {
Producer.produceMessage(beanJson, beanJson, null, null, null);
} catch (final Exception e) {
LOG.error("Error producing message ");
}
}
下面是我要写的内容:
private void writeToDriver(String beanJson) {
File filename = new File(JMS_LOCATION +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")) + ".xml");
try (final FileWriter fileOut = new FileWriter(filename)) {
try (final BufferedWriter out = new BufferedWriter(fileOut)) {
out.write(beanJson);
out.flush();
}
} catch (Exception e) {
LOG.error("Unable to write out : " + beanJson, e);
}
}
经纪人自动处理向消费者的再交付。你通常不希望消费者和生产者相互协调再交付——这违背了使用代理的目的。我发现现在有一个kahaDB持久性,我可以使用。还不确定它是如何工作的。kahadb是ActiveMQ的持久性存储。。data/kahadb/db-0.log。。等它存储消息、订阅信息和其他有状态数据