使用Spring Cloud AWS RDS Aurora的Spring Boot App-如何分配读取查询

问题描述

我有一个使用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群集,如下所示:

AWS RDS Configuration

@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 (将#修改为@)