Spring 配置死信队列。jms消费者的DLQ

Spring 配置死信队列。jms消费者的DLQ,spring,activemq,spring-jms,dead-letter,Spring,Activemq,Spring Jms,Dead Letter,这是一个相当简单的问题。。。我有一个spring项目,我使用队列(消费者)。 现在,我想为我使用的每个队列配置单独的死信队列 然而,在我看来,单个死信队列配置必须在代理服务(服务器)中完成,而不是在使用者中完成。真的是这样吗 我下面的代码不起作用,对吗 ActiveMQ 5.x中的JMS使用者无法配置代理端死信策略,这必须在配置XML中的代理上完成,或者通过编程代理配置完成。如果您的代理只是一个内存中的代理,那么您可以在spring中对其进行配置,但这对于大多数应用程序来说用处不大 有关代理配置

这是一个相当简单的问题。。。我有一个spring项目,我使用队列(消费者)。 现在,我想为我使用的每个队列配置单独的死信队列

然而,在我看来,单个死信队列配置必须在代理服务(服务器)中完成,而不是在使用者中完成。真的是这样吗

我下面的代码不起作用,对吗


ActiveMQ 5.x中的JMS使用者无法配置代理端死信策略,这必须在配置XML中的代理上完成,或者通过编程代理配置完成。如果您的代理只是一个内存中的代理,那么您可以在spring中对其进行配置,但这对于大多数应用程序来说用处不大


有关代理配置的更多帮助,请参阅。

您使用的是哪个版本的ActiveMQ?版本5.15.13
@Bean
public DeadLetterStrategy deadLetterStrategy(){
    IndividualDeadLetterStrategy dlq = new IndividualDeadLetterStrategy();
    dlq.setQueueSuffix(".DLQ");
    dlq.setUseQueueForQueueMessages(true);
    return dlq;
}

@Bean
public ActiveMQConnectionFactory consumerActiveMQConnectionFactory() {
    var activeMQConnectionFactory = new ActiveMQConnectionFactory();
    activeMQConnectionFactory.setBrokerURL(brokerUrl);

    RedeliveryPolicy policy = activeMQConnectionFactory.getRedeliveryPolicy();
    policy.setMaximumRedeliveries(maximumRedeliveries);
    policy.setInitialRedeliveryDelay(0);
    policy.setBackOffMultiplier(3);
    policy.setUseExponentialBackOff(true);

    return activeMQConnectionFactory;
}

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
    var factory = new DefaultJmsListenerContainerFactory();
    factory.setSessionAcknowledgeMode(JmsProperties.AcknowledgeMode.CLIENT.getMode());
    factory.setConcurrency(factoryConcurrency);
    factory.setConnectionFactory(consumerActiveMQConnectionFactory());

    return factory;
}

@Bean
public BrokerService broker() throws Exception {
    final BrokerService broker = new BrokerService();
    broker.addConnector(brokerUrl);
    broker.setPersistent(false);
    broker.setDestinationPolicy(policyMap());
    return broker;
}

@Bean
public PolicyMap policyMap() {
    PolicyMap destinationPolicy = new PolicyMap();
    List<PolicyEntry> entries = new ArrayList<PolicyEntry>();
    PolicyEntry queueEntry = new PolicyEntry();
    queueEntry.setQueue(">"); // In activemq '>' does the same thing as '*' does in other languages
    queueEntry.setDeadLetterStrategy(deadLetterStrategy());
    entries.add(queueEntry);
    destinationPolicy.setPolicyEntries(entries);
    return destinationPolicy;
} }
@JmsListener(destination = "myqueue")
    public void onMessage(Message message, Session session) throws JMSException {
        try {
            stuff()
            message.acknowledge();
        } catch (Exception ex) {
            session.recover();
        }
    }