如何在ActiveMQ Artemis客户端配置重发策略?
ActiveMQ Artemis JMS客户端重发策略配置方式
ActiveMQ Artemis的JMS客户端没有沿用经典版的RedeliveryPolicy独立类设计,重发相关策略直接通过连接工厂属性、URL参数或Broker端配置来设置,以下是具体实现方式:
1. 客户端代码直接配置(通过ActiveMQConnectionFactory setter)
直接调用连接工厂的对应方法设置重发参数,对应经典版RedeliveryPolicy的核心配置项:
var connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); // 最大重发次数,-1表示无限重发 connectionFactory.setMaxRetryAttempts(5); // 初始重发延迟(单位:毫秒) connectionFactory.setRetryInterval(1000); // 重发延迟倍增因子(开启指数回退) connectionFactory.setRetryIntervalMultiplier(2.0); // 重发延迟的上限值(避免延迟过大) connectionFactory.setMaxRetryInterval(10000); // 开启碰撞避免(随机调整重发延迟,防止客户端同时重试) connectionFactory.setUseRetryCollisionAvoidance(true); // 碰撞避免的延迟调整百分比(范围0-100) connectionFactory.setRetryCollisionAvoidancePercent(10);
2. 通过连接URL参数配置
将重发参数嵌入连接URL中,适合外部化配置场景:
var connectionFactory = new ActiveMQConnectionFactory( "tcp://localhost:61616?maxRetryAttempts=5&retryInterval=1000&retryIntervalMultiplier=2.0&maxRetryInterval=10000&useRetryCollisionAvoidance=true&retryCollisionAvoidancePercent=10" );
3. Broker端全局/地址级配置(统一管控)
如果需要对所有客户端或特定队列/地址统一设置重发策略,可修改Broker的broker.xml:
全局默认配置
<configuration> <core> <!-- 全局重发策略默认值 --> <default-retry-interval>1000</default-retry-interval> <default-retry-interval-multiplier>2.0</default-retry-interval-multiplier> <default-max-retry-interval>10000</default-max-retry-interval> <default-max-retries>5</default-max-retries> <default-use-retry-collision-avoidance>true</default-use-retry-collision-avoidance> <default-retry-collision-avoidance-percent>10</default-retry-collision-avoidance-percent> </core> </configuration>
地址级精准配置(针对特定队列/地址)
<configuration> <core> <address-settings> <!-- match支持通配符,如"myQueue"或"order.*" --> <address-setting match="myQueue"> <retry-interval>1000</retry-interval> <retry-interval-multiplier>2.0</retry-interval-multiplier> <max-retry-interval>10000</max-retry-interval> <max-retries>5</max-retries> <use-retry-collision-avoidance>true</use-retry-collision-avoidance> <retry-collision-avoidance-percent>10</retry-collision-avoidance-percent> </address-setting> </address-settings> </core> </configuration>
注:Broker端配置优先级高于客户端配置,适合团队统一管控重发规则。
内容的提问来源于stack exchange,提问作者diziaq
相关产品推荐
相关产品推荐

