问题描述
这是一个相当简单的问题...我有一个spring项目,在其中使用队列(消费)。 现在,我想为正在使用的每个队列配置单个死信队列。
但是,在我看来,单个死信队列配置必须在代理服务(SERVER)中完成,而不是在CONSUMER中完成。真的是这样吗?
我下面的代码将不起作用,对吗?
@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();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)