8.7. JMS 风格的 Selectors
SQS 不允许选择器,但您可以使用 Camel Filter EIP 并设置适当的 visibilityTimeout
。当 SQS 分配消息时,它将等待可见超时,然后尝试将消息发送到不同的消费者,除非收到 DeleteMessage
。默认情况下,Camel 始终会在路由末尾发送 DeleteMessage
,除非路由失败。要实现适当的过滤,在成功完成路由时也不会发送 DeleteMessage
,请使用 Filter:
from("aws2-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false&deleteAfterRead=false") .filter("${header.login} == true") .setProperty(Sqs2Constants.SQS_DELETE_FILTERED, constant(true)) .to("mock:filter");
在上面的代码中,如果交换没有适当的标头,则不会通过过滤器 AND 进行它,也不会从 SQS 队列中删除。5000 毫秒后,消息对其他消费者可见。
请注意,必须将属性 Sqs2Constants.SQS_DELETE_FILTERED
设置为 true
,以指示 Camel 发送 DeleteMessage
(如果过滤)。