このリンクがデッドレターチャネルと言うように、メッセージのヘッダーに最大再配信時間が含まれていることがわかりました。
Starting with 2.6: The header CamelRedeliveryMaxCounter, which is also defined on the Exchange.REDELIVERY_MAX_COUNTER, contains the maximum redelivery setting
だから私Exchange.REDELIVERY_MAX_COUNTER
は6に設定しようとします
arg0.getIn().setHeader(Exchange.REDELIVERY_MAX_COUNTER,6);
int max =arg0.getIn().getHeader(Exchange.REDELIVERY_MAX_COUNTER, Integer.class);
System.out.println(max);
これは私の完全なコードです
public class ActivemqRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("activemq:queue:MyQueue")
.onException(IOException.class)
.maximumRedeliveries(2)
.redeliveryDelay(4000)
.handled(true)
.beanRef("msgPro2","SendMail")
.to("activemq:queue:MyQueue.DLQ")
.end()
.transacted()
.process(new Processor() {
@Override
public void process(Exchange arg0) throws Exception {
arg0.getIn().setHeader(Exchange.REDELIVERY_MAX_COUNTER,6);
int max = arg0.getIn().getHeader(Exchange.REDELIVERY_MAX_COUNTER, Integer.class);
System.out.println(max);
/*error producing code*/
}}
);
メッセージにエラーがあるため、Processor()
2回再配信しようとしていますが、Exchange.REDELIVERY_MAX_COUNTER
6回にリセットしたため、メッセージは6回再配信されると想定されていますが、代わりに2回だけ再配信されます。しかし、値を出力するので、出力に 6 が表示されmax
ます。誰が何が間違っているのか教えてもらえますか?