我在camel中使用rabbitmq
组件。我有以下路线:
public void configure() throws Exception {
from("rabbitmq://localhost:5672/test_op?queue=out_queue&routingKey=test_out&username=guest&password=guest" +
"&autoAck=false&durable=true&exchangeType=direct&autoDelete=false&exchangePattern=InOut")
.aggregate(constant(true), new ArrayListAggregationStrategy())
.completionSize(2000).completionTimeout(60000).eagerCheckCompletion()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message m = exchange.getIn();
org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter();
String strValue = tc.convertTo(String.class, m.getBody());
System.out.println("[[out_queue]]: " + strValue);
}
});
}
问题是aggregate
的使用即使在调用process()
之前也向rabbitmq确认了消息。我想仅在process()
执行成功时确认消息,而不是在调用aggregate
时确认消息。我怎样才能做到这一点?
仅供参考:没有aggregate
此路线按预期工作。这意味着只有在成功执行process()
时才会确认消息。