13.3. 根据注解上的属性过滤 AMQP 消息
在代理将过期或未交付的 AMQP 消息移至您配置的过期或死信队列之前,代理会将注释和属性应用到消息。客户端可以根据属性或注释创建过滤器,从到期或死信队列中选择要使用的特定消息。
注意
代理应用的属性是 内部 属性,这些属性不向客户端公开以供常规使用,但 可以由 过滤器中的客户端指定。
以下是基于消息属性和注释的过滤器示例。建议尽可能根据属性进行过滤,因为这种方法需要较少的代理处理。
基于消息属性过滤
ConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:5672");
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
connection.start();
javax.jms.Queue queue = session.createQueue("my_DLQ");
MessageConsumer consumer = session.createConsumer(queue, "_AMQ_ORIG_ADDRESS='original_address_name'");
Message message = consumer.receive();
基于消息注解进行过滤
ConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:5672");
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
connection.start();
javax.jms.Queue queue = session.createQueue("my_DLQ");
MessageConsumer consumer = session.createConsumer(queue, "\"m.x-opt-ORIG-ADDRESS\"='original_address_name'");
Message message = consumer.receive();
注意
在使用基于注释的 AMQP 消息时,客户端必须将 m. 前缀附加到消息注释,如上例中所示。
其它资源
- 有关代理应用到过期或未传送的 AMQP 消息的注解和属性的更多信息,请参阅 第 4.14 节 “已过期或未传送的 AMQP 消息的注解和属性”。