ActiveMQ上的JMS消息持久性

ActiveMQ上的JMS消息持久性,jms,activemq,Jms,Activemq,我需要确保在使用者失败时重新交付JMS消息 现在设置生产者的方式-DefaultJmsListenerContainerFactory和Session.AUTO_ 我正在尝试构建一个jar,并尝试在这里将消息保存到服务器中,一旦应用程序能够消费,jar中的生产者将向应用程序生成消息 这是一个好方法吗?!有没有其他方法/建议来改进这一点 public void handleMessagePersistence(final Object bean) { ObjectMapper mapp

我需要确保在使用者失败时重新交付JMS消息

现在设置生产者的方式-DefaultJmsListenerContainerFactory和Session.AUTO_

我正在尝试构建一个jar,并尝试在这里将消息保存到服务器中,一旦应用程序能够消费,jar中的生产者将向应用程序生成消息

这是一个好方法吗?!有没有其他方法/建议来改进这一点

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。。等它存储消息、订阅信息和其他有状态数据