我有一个要求,我必须在邮件重试时添加和更新邮件头。
这是我的听众或消费者。我的消息正在重试,但是在设置标题时我得到了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);
}
}
}
答案 0 :(得分:0)
你所尝试的是由于多种原因而赢得工作。您正尝试在传入消息上设置消息 PROPERTY ,该消息确实是只读的。您收到的消息是实际消息的副本,而不是在TX内部重新发送且有资格重新发送的消息。
要对在处理过程中遇到错误的已传递邮件进行任何类型的更新,您需要创建一个新实例并使用适当的信息对其进行修饰,然后使用MessageProducer将其放回目标。