Java spring boot jms重新交付策略bean被忽略?
因此,我正在使用activemq设置SpringJMS。我正在测试我的设置 我试图设置一个redeliverypolicy,这样它就不会立即重试,但我注意到在我的logging+activemq代理中,它会立即重试,而不使用我的redeliverypolicybean。有人能指出我做错了什么吗?根据我在文件中能找到的,它似乎是正确的。(如果有人知道为什么我的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
个人死信策略被忽略了,但放在通用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;
}
}