ActiveMQ Artemis是否支持客户端侧配置消息重分发?
你的结论不完全正确,ActiveMQ Artemis 同时支持 Broker 端和客户端侧配置消息重分发规则,并非只能通过 broker.xml 配置。
配置规则说明
- Broker 端
broker.xml中配置的重分发规则为全局默认规则,默认情况下客户端侧配置的优先级更高,会覆盖当前连接关联的所有消费者的重分发策略。 - 若 Broker 端对应地址的配置中开启了
override-redelivery-settings参数,会强制以 Broker 端的重分发配置为准,此时客户端配置不生效。
Spring Boot 2.x 客户端侧配置方法
你可以通过以下两种方式配置客户端重分发策略:
1. Broker URL 参数配置
直接在连接地址后追加重分发相关参数即可,示例:
tcp://你的Broker地址:61616?jms.redeliveryPolicy.maxRedeliveries=3&jms.redeliveryPolicy.redeliveryDelay=1000
常用客户端重分发参数如下:
jms.redeliveryPolicy.maxRedeliveries:最大重发次数,超过阈值后消息会被转入死信队列jms.redeliveryPolicy.redeliveryDelay:首次重发的延迟时间,单位为毫秒jms.redeliveryPolicy.maxRedeliveryDelay:重发最大延迟时间,避免指数退避时延迟过高jms.redeliveryPolicy.backOffMultiplier:延迟退避倍数,开启指数退避后每次重发延迟会乘以该倍数
2. application.yml + 自定义 Bean 配置
如果使用官方 Artemis Starter,也可以通过显式注入重分发策略 Bean 的方式实现配置:
application.yml基础连接配置:
spring: artemis: mode: native broker-url: tcp://你的Broker地址:61616 user: 账号 password: 密码 jms: listener: acknowledge-mode: client
- 自定义配置类注入重分发策略:
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.artemis.jms.client.RedeliveryPolicy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ArtemisConfig { @Bean public RedeliveryPolicy customRedeliveryPolicy() { RedeliveryPolicy policy = new RedeliveryPolicy(); // 最大重发3次 policy.setMaxRedeliveries(3); // 首次重发延迟1秒 policy.setRedeliveryDelay(1000); // 开启指数退避 policy.setUseExponentialBackOff(true); // 退避倍数2 policy.setBackOffMultiplier(2); // 最大重发延迟不超过10秒 policy.setMaxRedeliveryDelay(10000); return policy; } @Bean public ActiveMQConnectionFactory connectionFactory(RedeliveryPolicy customRedeliveryPolicy) { ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://你的Broker地址:61616"); factory.setRedeliveryPolicy(customRedeliveryPolicy); return factory; } }
内容的提问来源于stack exchange,提问作者Ponaf Sonaw
相关产品推荐
相关产品推荐

