Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring boot jms重新交付策略bean被忽略?_Java_Spring_Spring Boot_Activemq_Spring Jms - Fatal编程技术网

Java spring boot jms重新交付策略bean被忽略?

Java spring boot jms重新交付策略bean被忽略?,java,spring,spring-boot,activemq,spring-jms,Java,Spring,Spring Boot,Activemq,Spring Jms,因此,我正在使用activemq设置SpringJMS。我正在测试我的设置 我试图设置一个redeliverypolicy,这样它就不会立即重试,但我注意到在我的logging+activemq代理中,它会立即重试,而不使用我的redeliverypolicybean。有人能指出我做错了什么吗?根据我在文件中能找到的,它似乎是正确的。(如果有人知道为什么我的个人死信策略被忽略了,但放在通用DLQ上总是受欢迎的) deadLetterStrategy关注代理,因此您必须如下定义bean 看看 i

因此,我正在使用activemq设置SpringJMS。我正在测试我的设置

我试图设置一个redeliverypolicy,这样它就不会立即重试,但我注意到在我的logging+activemq代理中,它会立即重试,而不使用我的redeliverypolicybean。有人能指出我做错了什么吗?根据我在文件中能找到的,它似乎是正确的。(如果有人知道为什么我的
个人死信策略被忽略了,但放在通用DLQ上总是受欢迎的)


deadLetterStrategy
关注代理,因此您必须如下定义bean

看看

import java.util.ArrayList;
导入java.util.List;
导入javax.jms.ConnectionFactory;
导入org.apache.activemq.ActiveMQConnectionFactory;
导入org.apache.activemq.RedeliveryPolicy;
导入org.apache.activemq.broker.BrokerService;
导入org.apache.activemq.broker.region.policy.DeadLetterStrategy;
导入org.apache.activemq.broker.region.policy.IndividualDeadLetterStrategy;
导入org.apache.activemq.broker.region.policy.PolicyEntry;
导入org.apache.activemq.broker.region.policy.PolicyMap;
导入org.springframework.boot.SpringApplication;
导入org.springframework.boot.autoconfigure.springboot应用程序;
导入org.springframework.context.ConfigurableApplicationContext;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.ComponentScan;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.context.annotation.FilterType;
导入org.springframework.stereotype.Component;
@SpringBoot应用程序
@配置
@ComponentScan(excludeFilters=@ComponentScan.Filter(type=FilterType.ANNOTATION,class={Configuration.class,
Component.class})
公共类ActiveMQConfigurationDeadLetterStrategy{
公共静态void main(字符串[]args){
ConfigurableApplicationContext app=SpringApplication.run(ActiveMQConfigurationDeadLetterStrategy.class,args);
}
@豆子
public BrokerService broker()引发异常{
final BrokerService broker=新BrokerService();
broker.addConnector(“tcp://localhost:61616");
addConnector(“vm://localhost”);
broker.setPersistent(false);
setDestinationPolicy(policyMap());
回报经纪人;
}
@豆子
公共策略图PolicyMap(){
PolicyMap destinationPolicy=new PolicyMap();
列表项=新的ArrayList();
PolicyEntry queueEntry=新的PolicyEntry();
queueEntry.setQueue(“>”);
setDeadLetterStrategy(deadLetterStrategy());
PolicyEntry topicEntry=新的PolicyEntry();
topicEntry.setTopic(“>”);
setDeadLetterStrategy(deadLetterStrategy());
条目。添加(队列条目);
条目。添加(topicEntry);
destinationPolicy.setPolicyEntries(条目);
返回目的地政策;
}
@豆子
公开死信策略死信策略(){
IndividualDeadLetterStrategy deadLetterStrategy=新的IndividualDeadLetterStrategy();
deadLetterStrategy.setQueueSuffix(“.dlq”);
deadLetterStrategy.setUseQueueForQueueMessages(true);
返回死信策略;
}
@豆子
公共再交付政策再交付政策(){
重新交付政策重新交付政策=新的重新交付政策();
重新交付政策。设置初始重新交付政策(5000);
再交付政策。挫折乘数(2);
重新交付策略。setUseExponentialBackOff(真);
再交付政策。设定最大再交付(5);
返还再交付政策;
}
@豆子
公共连接工厂jmsConnectionFactory(){
ActiveMQConnectionFactory connectionFactory=新的ActiveMQConnectionFactory();
setRedeliveryPolicy(redeliveryPolicy());
返回连接工厂;
}
}
更新

如果使用外部AMQ,则只能在activemq.xml配置文件的目标策略映射中设置死信策略 例如:

<broker>

  <destinationPolicy>
    <policyMap>
      <policyEntries>
        <!-- Set the following policy on all queues using the '>' wildcard -->
        <policyEntry queue=">">
          <deadLetterStrategy>
            <!--
              Use the prefix 'DLQ.' for the destination name, and make
              the DLQ a queue rather than a topic
            -->
            <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
          </deadLetterStrategy>
        </policyEntry>
      </policyEntries>
    </policyMap>
  </destinationPolicy>

</broker>






import java.util.ArrayList;
import java.util.List;

import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.RedeliveryPolicy;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.region.policy.DeadLetterStrategy;
import org.apache.activemq.broker.region.policy.IndividualDeadLetterStrategy;
import org.apache.activemq.broker.region.policy.PolicyEntry;
import org.apache.activemq.broker.region.policy.PolicyMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Component;

@SpringBootApplication
@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = { Configuration.class,
        Component.class }))
public class ActiveMQConfigurationDeadLetterStrategy {

    public static void main(String[] args) {
        ConfigurableApplicationContext app = SpringApplication.run(ActiveMQConfigurationDeadLetterStrategy.class, args);
    }

    @Bean
    public RedeliveryPolicy redeliveryPolicy() {
        RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
        redeliveryPolicy.setInitialRedeliveryDelay(5000);
        redeliveryPolicy.setBackOffMultiplier(2);
        redeliveryPolicy.setUseExponentialBackOff(true);
        redeliveryPolicy.setMaximumRedeliveries(5);
        return redeliveryPolicy;
    }

    @Bean
    public ConnectionFactory jmsConnectionFactory() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        connectionFactory.setRedeliveryPolicy(redeliveryPolicy());
        return connectionFactory;
    }
}

导入java.util.ArrayList;
导入java.util.List;
导入javax.jms.ConnectionFactory;
导入org.apache.activemq.ActiveMQConnectionFactory;
导入org.apache.activemq.RedeliveryPolicy;
导入org.apache.activemq.broker.BrokerService;
导入org.apache.activemq.broker.region.policy.DeadLetterStrategy;
导入org.apache.activemq.broker.region.policy.IndividualDeadLetterStrategy;
导入org.apache.activemq.broker.region.policy.PolicyEntry;
导入org.apache.activemq.broker.region.policy.PolicyMap;
导入org.springframework.boot.SpringApplication;
导入org.springframework.boot.autoconfigure.springboot应用程序;
导入org.springframework.context.ConfigurableApplicationContext;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.ComponentScan;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.context.annotation.FilterType;
导入org.springframework.stereotype.Component;
@SpringBoot应用程序
@配置
@ComponentScan(excludeFilters=@ComponentScan.Filter(type=FilterType.ANNOTATION,class={Configuration.class,
Component.class})
公共类ActiveMQConfigurationDeadLetterStrategy{
公共静态void main(字符串[]args){
ConfigurableApplicationContext app=SpringApplication.run(ActiveMQConfigurationDeadLetterStrategy.class,args);
}
@豆子
公共再交付政策再交付政策(){
重新交付政策重新交付政策=新的重新交付政策();
重新交付政策。设置初始重新交付政策(5000);
再交付政策。挫折乘数(2);
重新交付策略。setUseExponentialBackOff(真);
再交付政策。设定最大再交付(5);
返回re
import java.util.ArrayList;
import java.util.List;

import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.RedeliveryPolicy;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.region.policy.DeadLetterStrategy;
import org.apache.activemq.broker.region.policy.IndividualDeadLetterStrategy;
import org.apache.activemq.broker.region.policy.PolicyEntry;
import org.apache.activemq.broker.region.policy.PolicyMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Component;

@SpringBootApplication
@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = { Configuration.class,
        Component.class }))
public class ActiveMQConfigurationDeadLetterStrategy {

    public static void main(String[] args) {
        ConfigurableApplicationContext app = SpringApplication.run(ActiveMQConfigurationDeadLetterStrategy.class, args);
    }

    @Bean
    public BrokerService broker() throws Exception {
        final BrokerService broker = new BrokerService();
        broker.addConnector("tcp://localhost:61616");
        broker.addConnector("vm://localhost");
        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(">");
        queueEntry.setDeadLetterStrategy(deadLetterStrategy());
        PolicyEntry topicEntry = new PolicyEntry();
        topicEntry.setTopic(">");
        topicEntry.setDeadLetterStrategy(deadLetterStrategy());
        entries.add(queueEntry);
        entries.add(topicEntry);
        destinationPolicy.setPolicyEntries(entries);
        return destinationPolicy;
    }

    @Bean
    public DeadLetterStrategy deadLetterStrategy() {
        IndividualDeadLetterStrategy deadLetterStrategy = new IndividualDeadLetterStrategy();
        deadLetterStrategy.setQueueSuffix(".dlq");
        deadLetterStrategy.setUseQueueForQueueMessages(true);
        return deadLetterStrategy;
    }

    @Bean
    public RedeliveryPolicy redeliveryPolicy() {
        RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
        redeliveryPolicy.setInitialRedeliveryDelay(5000);
        redeliveryPolicy.setBackOffMultiplier(2);
        redeliveryPolicy.setUseExponentialBackOff(true);
        redeliveryPolicy.setMaximumRedeliveries(5);
        return redeliveryPolicy;
    }

    @Bean
    public ConnectionFactory jmsConnectionFactory() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.setRedeliveryPolicy(redeliveryPolicy());
        return connectionFactory;
    }
}
<broker>

  <destinationPolicy>
    <policyMap>
      <policyEntries>
        <!-- Set the following policy on all queues using the '>' wildcard -->
        <policyEntry queue=">">
          <deadLetterStrategy>
            <!--
              Use the prefix 'DLQ.' for the destination name, and make
              the DLQ a queue rather than a topic
            -->
            <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
          </deadLetterStrategy>
        </policyEntry>
      </policyEntries>
    </policyMap>
  </destinationPolicy>

</broker>






import java.util.ArrayList;
import java.util.List;

import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.RedeliveryPolicy;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.region.policy.DeadLetterStrategy;
import org.apache.activemq.broker.region.policy.IndividualDeadLetterStrategy;
import org.apache.activemq.broker.region.policy.PolicyEntry;
import org.apache.activemq.broker.region.policy.PolicyMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Component;

@SpringBootApplication
@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = { Configuration.class,
        Component.class }))
public class ActiveMQConfigurationDeadLetterStrategy {

    public static void main(String[] args) {
        ConfigurableApplicationContext app = SpringApplication.run(ActiveMQConfigurationDeadLetterStrategy.class, args);
    }

    @Bean
    public RedeliveryPolicy redeliveryPolicy() {
        RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
        redeliveryPolicy.setInitialRedeliveryDelay(5000);
        redeliveryPolicy.setBackOffMultiplier(2);
        redeliveryPolicy.setUseExponentialBackOff(true);
        redeliveryPolicy.setMaximumRedeliveries(5);
        return redeliveryPolicy;
    }

    @Bean
    public ConnectionFactory jmsConnectionFactory() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        connectionFactory.setRedeliveryPolicy(redeliveryPolicy());
        return connectionFactory;
    }
}