重试期间ActiveMQ中的消息标题更新错误

时间:2015-04-08 12:06:11

标签: java spring jms activemq

我有一个要求,我必须在邮件重试时添加和更新邮件头。

这是我的听众或消费者。我的消息正在重试,但是在设置标题时我得到了Exception。请告知正确的方法。

根据JMS规范,它说消息标头永远不会是只读的。

javax.jms.MessageNotWriteableException:消息属性是只读的

  public void onMessage(Message message) {
    if (message != null && message instanceof TextMessage) {
        TextMessage textMessage = (TextMessage) message;
        try {
            String input = textMessage.getText();
            throw new Exception();
        } catch (Throwable t) {
            t.printStackTrace();
            try {
                message.setStringProperty("retryable","YES");
            } catch (JMSException e) {
                e.printStackTrace();
            }
            throw new RuntimeException(t);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你所尝试的是由于多种原因而赢得工作。您正尝试在传入消息上设置消息 PROPERTY ,该消息确实是只读的。您收到的消息是实际消息的副本,而不是在TX内部重新发送且有资格重新发送的消息。

要对在处理过程中遇到错误的已传递邮件进行任何类型的更新,您需要创建一个新实例并使用适当的信息对其进行修饰,然后使用MessageProducer将其放回目标。