提问人:BlueIce 提问时间:11/17/2023 更新时间:11/17/2023 访问量:17
如何在SpringBoot 2.7.15中实现ConnectionFactory#setMaxInboundMessageBodySize?
How to implement ConnectionFactory#setMaxInboundMessageBodySize in SpringBoot 2.7.15?
问:
我正在尝试增加 inbonund amqp 消息的正文大小限制。
我有一个 Cloud-Foundry Springboot 2.7.15 应用程序。
我的类目前如下所示:
@Configuration
public class RabbitConfig {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public ConnectionFactoryCustomizer customizer() {
return connectionFactory -> connectionFactory.setMaxInboundMessageBodySize(1024 * 1024 * 100);
}
}
调试时,我可以看到在执行 customizer-bean 后,返回的工厂(具有 rabbitConnectionFactory)确实正确设置了 maxInboundMessageBodySize 值 (1024 * 1024 * 100)。
但是,当将应用程序部署到CloudFoundry并尝试处理队列中的消息时,我仍然收到错误消息:
j.l.IllegalStateException: Message body is too large (71506699), maximum configured size is 67108864. See ConnectionFactory#setMaxInboundMessageBodySize if you need to increase the limit.\n\tat c.r.c.i.CommandAssembler.consumeHeaderFrame(CommandAssembler.java:109)\n\tat c.r.c.i.CommandAssembler.handleFrame(CommandAssembler.java:172)\n\tat c.r.c.i.AMQCommand.handleFrame(AMQCommand.java:105)\n\tat c.r.c.i.AMQChannel.handleFrame(AMQChannel.java:115)\n\tat c.r.c.i.AMQConnection.readFrame(AMQConnection.java:746)\n\tat c.r.c.i.AMQConnection.access$300(AMQConnection.java:47)\n\tat c.r.c.i.AMQConnection$MainLoop.run(AMQConnection.java:673)\n\tat java.lang.Thread.run(Unknown Source)\n","message":"An unexpected connection driver error occurred"}
不知何故,原始值仍在使用。
我已经检查了是否只创建了一个 ConnectionFactory - 从 RabbitAutoConfiguration.class 返回的那个。
我也尝试升级到Springboot 3.1.5。但是没有运气 - 同样的错误仍然存在。
我已经看到了下面的帖子并尝试了建议的修复程序,但没有运气: 带有 RabbitMQ binder 的 Spring cloud stream 抛出 java.lang.IllegalStateException:消息体太大
任何帮助都是值得赞赏的。
答:
0赞
Anvar Bratov
11/30/2023
#1
@Bean
public CachingConnectionFactory smtConnectionFactory() {
RabbitConnectionProperties.Connection connectionParams = rabbitConnectionProperties.getSmt();
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(connectionParams.getHost());
connectionFactory.setPort(connectionParams.getPort());
connectionFactory.setVirtualHost(connectionParams.getVirtualHost());
connectionFactory.setUsername(connectionParams.getUsername());
connectionFactory.setPassword(connectionParams.getPassword());
connectionFactory.getRabbitConnectionFactory().setMaxInboundMessageBodySize(1024*1024*100);
return connectionFactory;
}
评论