问题描述
我有一个使用AWS RDS DB的Spring Boot应用程序。
我正在尝试使用只读副本的RDS aurora / Postgres DB。我已经运行了该应用程序,但是看不到任何流向读取器节点的流量。
设置是Spring boot(2.2.7),spring cloud aws 2.2.4-RELEASE,spring数据(JpaRepository)。
具有2个节点,1个读取器和1个写入器的RDS aurora群集,如下所示:
用@Transactional(readOnly = true)
注释的控制器GET方法
@RequestMapping(
value = "/counters",produces = {"application/json"},method = RequestMethod.GET
)
@ResponseBody
@Transactional(readOnly = true)
public ResponseEntity<List<Counter>> getCounters() {
return ResponseEntity.of(Optional.of(this.counterDAO.findAll()));
}
最终弹簧云AWS配置
cloud:
aws:
region:
static: ap-southeast-2
credentials:
accessKey: ${ACCESS_KEY}
secretKey: ${SECRET_KEY}
rds:
rds-db-cluster-instance-1:
password: ${POSTGRES_PASSWORD}
username: postgres
readReplicaSupport: "true"
databaseName: postgres
stack:
auto: false
这时我可以从数据库读取和写入,但是我看不到任何证据表明它正在使用读取器节点。
该应用程序仅在我使用编写者实例名称作为cloud.aws.rds.<instance-id>
时启动,而无法使用集群名称(使用编写者ID可能是配置它的正确方法,文档并不清楚),并且如果我使用只读实例ID,则更新数据库的方法将失败。
在AWS控制台上进行的监视仅显示Writer节点上的连接(我可以通过2个调用GET和POST方法的线程将其增加到10-15个连接),但是Reader节点始终为0。
第二,我在ReadOnlyRoutingDataSource类上使用调试器设置了断点,这些断点从未被命中,所以我很确定它没有使用只读功能。
我相当确定这是由于我正在使用的实例ID以及与基础RDS配置有关的原因,但是我一生都无法解决它。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)