如何为AWS RDS Proxy配置Quarkus 3的Agroal最优参数?
Quarkus 3 适配AWS RDS Proxy的Agroal最优配置方案
你的思路完全正确——使用AGROAL_POOLLESS模式是适配RDS Proxy的最佳选择,原因很简单:RDS Proxy本身已经提供了成熟的连接池管理、连接复用和故障转移能力,在Lambda这种短生命周期、快速伸缩的环境下,应用层再维护自己的连接池完全是画蛇添足,无池模式会把所有连接请求直接委托给RDS Proxy,完美契合场景需求。
关于你提到的maxSize参数:
- 确实必须设置,因为Agroal的配置校验逻辑要求这个参数不能为空
- 但在
AGROAL_POOLLESS模式下,这个参数完全没有实际作用,你可以随便填一个值(比如1或者100),Agroal不会基于这个值限制连接数量,所有请求都会直接转发给RDS Proxy
下面是优化后的完整配置代码:
@ApplicationScoped public class DataSourceConfig { @Produces public AgroalDataSource dataSource() throws SQLException { AgroalDataSourceConfigurationSupplier configSupplier = new AgroalDataSourceConfigurationSupplier(); configSupplier // 指定无池模式,将连接管理完全委托给RDS Proxy .dataSourceImplementation(AgroalDataSourceConfiguration.DataSourceImplementation.AGROAL_POOLLESS) .connectionPoolConfiguration() // 必须设置,但无实际作用,随便填一个值即可 .maxSize(1) // 可选:设置连接超时,适配Lambda的执行超时限制 .connectionTimeout(Duration.ofSeconds(30)) .connectionFactoryConfiguration() // 填写RDS Proxy的JDBC端点,而非直接的RDS实例地址 .jdbcUrl("jdbc:mysql://your-rds-proxy-endpoint:3306/your-db-name") .credential(new NamePrincipal("your-db-username")) .credential(new SimplePassword("your-db-password")); return AgroalDataSource.from(configSupplier.get()); } }
额外的几个注意点:
- 不需要设置
minSize、initialSize、maxLifetime这类连接池相关参数,在无池模式下它们都会被忽略 - 如果你的Lambda是通过IAM角色认证RDS Proxy,可以替换掉用户名密码的凭据配置,改用IAM认证的方式(需要额外配置JDBC驱动的IAM插件)
- 确保Lambda的执行角色拥有访问RDS Proxy的权限,并且安全组配置允许Lambda访问RDS Proxy的端口
内容的提问来源于stack exchange,提问作者Andy McKibbin
相关产品推荐
相关产品推荐

