可以将originalDestination用作死信队列使用者的选择器吗?

时间:2019-04-24 15:44:03

标签: java spring spring-boot jms activemq

我正在尝试从共享死信队列中使用,而只想使用由我的应用程序创建的消息。我试图在使用者的originalDestination属性上添加一个选择器,但是它不起作用。我有什么想念的吗?

@JmsListener(destination = "${dlq}", selector = "originalDestination = 'Consumer.original.VirtualTopic.original'")
    public void onMessageReceived(Message message) {
        log.info(message.getOriginalDestination().toString());
        log.info(message.toString());
    }

2 个答案:

答案 0 :(得分:0)

由于原始目的地不是JMS保留属性(如JMSReplyTo等),也不是可通过标准message getObjectProperty类型方法访问的message属性,因此选择器将无法使用该属性。

答案 1 :(得分:0)

JMSDestination的属性表达式选择器将首先查看originalDestination字段,以便它可以工作。 原始目的地为字符串,将具有队列/主题类型前缀。

这应该有效:

@JmsListener(destination = "${dlq}", selector = "JMSDestination = 'queue://Consumer.original.VirtualTopic.original'")

请参阅:https://github.com/apache/activemq/blob/master/activemq-client/src/main/java/org/apache/activemq/filter/PropertyExpression.java#L48