Spring4.x迁移至5.x及JDK17后RabbitMQ配置报错求助
Spring及Spring Integration迁移后RabbitMQ适配器问题排查
环境背景
应用包含Spring及Spring Integration依赖,已完成版本迁移:
- Spring从4.1.1.RELEASE升级至5.3.39
- Spring Integration从2.2.3.RELEASE升级至5.5.20
配置的RabbitMQ入站适配器
<int-amqp:inbound-channel-adapter id="testAmqpAdapter" channel="AppTestChnl" queue-names="${amqp.queue.test}" connection-factory="connectionFactory" auto-startup="true" concurrent-consumers="${amqp.consumer.count}" channel-transacted="true" task-executor="taskExecutor" prefetch-count="2" tx-size="2" acknowledge-mode="AUTO" error-handler="messageErrorHandler" />
遇到的错误及处理
错误1:txSize属性不可写
- 错误信息:
org.springframework.beans.NotWritablePropertyException,提示org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer的txSize属性不可写或setter方法无效 - 解决方案:移除配置中的
tx-size="2"属性,仅保留prefetch-count="2",错误消失
错误2:Exchange类型不匹配导致连接关闭
- 错误信息:日志持续出现连接关闭错误,提示
PRECONDITION_FAILED - exchange 'channelName'的type参数不匹配,接收的是'direct'但当前为'fanout' - 问题原因:应用代码或配置中声明的Exchange类型(direct),与RabbitMQ服务器上已存在的同名Exchange类型(fanout)不一致
- 解决方案:
- 若需保留现有Exchange类型(fanout):修改应用中对应的Exchange声明配置,将类型改为
fanout - 若需使用direct类型Exchange:删除RabbitMQ服务器上的同名fanout类型Exchange,重启应用让其重新声明正确类型的Exchange
- 注意:删除Exchange会清除其绑定关系,操作前需确认业务影响
- 若需保留现有Exchange类型(fanout):修改应用中对应的Exchange声明配置,将类型改为
内容的提问来源于stack exchange,提问作者manoharnr fiserv
相关产品推荐
相关产品推荐

