You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 EI Docker容器连接Amazon RDS PostgreSQL间歇性UnknownHostException求助

间歇性Amazon RDS(PostgreSQL)连接失败问题(WSO2 EI 6.4.0 Docker环境)

在WSO2 EI 6.4.0 Docker容器中使用Amazon RDS(PostgreSQL)进行数据库操作时,大部分场景正常,但间歇性抛出java.net.UnknownHostException,无法解析RDS主机yyyy.xxx.us-west-1.rds.amazonaws.com。

完整异常堆栈

[2024-03-25 04:30:08,007] [-1234] [] [pool-28-thread-16661] ERROR {org.apache.synapse.mediators.db.DBLookupMediator} -  SQL Exception occurred while executing statement : select column1,column2 from schema.tabel_name where task_name=? against DataSource : jdbc/DSETL
org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:354)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:263)
    at org.postgresql.Driver.makeConnection(Driver.java:444)
    at org.postgresql.Driver.connect(Driver.java:297)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:278)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:730)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:664)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:200)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128)
    at org.apache.synapse.mediators.db.DBLookupMediator.processStatement(DBLookupMediator.java:58)
    at org.apache.synapse.mediators.db.AbstractDBMediator.mediate(AbstractDBMediator.java:233)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
    at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69)
    at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:169)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:104)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:148)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:84)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:224)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.startup.tasks.MessageInjector.execute(MessageInjector.java:321)
    at org.wso2.carbon.mediation.ntask.NTaskAdapter.execute(NTaskAdapter.java:98)
    at org.wso2.carbon.ntask.core.impl.TaskQuartzJobAdapter.execute(TaskQuartzJobAdapter.java:67)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.UnknownHostException: yyyy.xxx.us-west-1.rds.amazonaws.com
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.postgresql.core.PGStream.createSocket(PGStream.java:243)
    at org.postgresql.core.PGStream.<init>(PGStream.java:98)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:132)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:258)
    ... 39 more

已尝试的修复步骤

  • 将PostgreSQL驱动版本从42.2.0升级至42.7.0
  • 在CAR项目的pom.xml中添加以下依赖并重新部署:
    <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.0</version>
    </dependency>
    

问题仍间歇性出现,以下是可行的解决思路:


解决思路

1. 排查DNS解析稳定性

  • 在Docker容器内部间歇性执行nslookup yyyy.xxx.us-west-1.rds.amazonaws.com或dig yyyy.xxx.us-west-1.rds.amazonaws.com,确认DNS解析是否存在失败情况
  • 修改Docker容器/etc/resolv.conf,更换为更可靠的DNS服务器(如AWS内部DNS、8.8.8.8)
  • 调整JVM参数缩短DNS缓存时间:添加-Dnetworkaddress.cache.ttl=60,避免缓存过期的DNS记录

2. 优化数据库连接池配置

针对数据源jdbc/DSETL调整以下参数:

  • 配置validationQuery=SELECT 1,开启testOnBorrow=true,确保每次获取连接时验证有效性
  • 调整timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis,定期清理空闲无效连接
  • 设置maxWait参数,避免线程无限等待连接

3. 验证网络连通性

  • 检查Docker容器所在VPC与RDS实例的网络规则,确认无间歇性防火墙/安全组变更
  • 查看AWS RDS监控指标(CPU、连接数、网络流量),排查实例是否存在临时性能瓶颈
  • 在容器内持续执行ping yyyy.xxx.us-west-1.rds.amazonaws.com或telnet yyyy.xxx.us-west-1.rds.amazonaws.com 5432,记录丢包或超时情况

4. 确认驱动加载优先级

  • 检查WSO2 EI容器<EI_HOME>/repository/components/lib目录,确保仅存在postgresql-42.7.0.jar,无旧版本驱动
  • 验证CAR包部署后,驱动是否正确覆盖容器内的旧文件

5. 启用详细日志排查

  • 在WSO2 EI的log4j.properties中开启PostgreSQL驱动DEBUG日志,或DNS解析相关日志,定位失败触发条件
  • 关联异常发生时间与AWS云监控事件,排查是否存在关联触发因素

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:41:01