36.7. JMS-style Selectors
SQS 不允许选择器,但您可以使用 Camel Filter EIP 和设置适当的 visibilityTimeout 来有效地达到此目的。当 SQS 分配消息时,它将在尝试将消息发送到其他消费者前等待可见性超时,除非收到 DeleteMessage。默认情况下,Camel 始终会在路由末尾发送 DeleteMessage,除非路由失败。要进行适当的过滤,即使成功完成路由,也不会发送 DeleteMessage,请使用 Filter:
from("aws-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false")
.filter("${header.login} == true")
.to("mock:result");
from("aws-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false")
.filter("${header.login} == true")
.to("mock:result");
在上面的代码中,如果交换没有适当的标头,则不会通过过滤器 AND 将其从 SQS 队列中删除。在 5000 miliseconds 后,该消息对其他消费者可见。