我有一个休息服务,它将消息发送到我的队列,然后将这些消息路由到文件:
from("test-jms:queue:test.queue").to("file://test");
此外,我在端点上有一个事件驱动的使用者。现在,只有在消息消耗时才会写入日志:
final Consumer consumer = endpoint.createConsumer(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String message = exchange.getIn().getBody(String.class);
LOG.info("Message processed: " + message);
}
});
这一切都很好。在/test
文件夹中,我收到的每封邮件都有一个新文件,另外消费者创建了一个附加.camelLock
的标记文件。使用readLock=none
选项可以防止使用者按预期生成这些标记文件。
但是,消费后消息文件和标记文件都不会被删除。我可能在我的消费者实施中遗漏了一些东西吗?
答案 0 :(得分:4)
当您手动创建具有内联处理器的消费者时,您需要在完成触发删除/移动文件等工作时手动完成Exchange的UoW。
exchange.getUnitOfWork().done(exchange);
您也可以尝试使用应该为您完成UnitOfWork的UnitOfWorkProducer
包装处理器。
答案 1 :(得分:3)
final Consumer consumer = endpoint.createConsumer(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String message = exchange.getIn().getBody(String.class);
LOG.info("Message processed: " + message);
ConsumerTemplate consumerTemplate = camelContext.createConsumerTemplate();
consumerTemplate.doneUoW(exchange);
}
});
此外,创建端点时必须使用delete=true
选项:
Endpoint endpoint = camelContext.getEndpoint("file://test?delete=true");