ActiveMQ Artemis 2.17.0异常路由及previousAddress错误问题排查
根因分析
- RoutingContext池化复用残留bug(核心原因)
ActiveMQ Artemis 2.17.0版本对RoutingContext实例采用对象池复用机制降低GC开销,该版本存在明确缺陷:实例归还对象池时不会清空previousAddress、previousRoutingType这类历史路由字段。你日志中看到的topic.private.abc.task.V1完全是之前处理其他消息时遗留在复用对象中的脏数据,和当前正在路由的topic.abc.rawmessage.V1消息无任何关联,不存在真实的跨主题路由行为。 - 虚拟主题配置无关联
你配置的virtualTopicConsumerWildcards规则仅匹配clustered.*.>前缀的地址,两个涉及的主题均不符合该前缀规则,不可能触发这两个地址之间的路由转换,排除了配置导致真实路由的可能性。
解决方案
- 优先升级到ActiveMQ Artemis 2.18.0及以上正式版本,该版本已修复
RoutingContext池化对象字段未清空的缺陷,升级后异常的previousAddress记录会自动消失。 - 若暂时无法升级,可对日志逻辑做兼容处理:以
Message对象本身携带的目标地址为准,忽略RoutingContext的previousAddress字段,或增加逻辑校验仅当previousAddress符合预期路由规则时才记录。
内容的提问来源于stack exchange,提问作者Nicolas Verducou
相关产品推荐
相关产品推荐

