amazon-web-services - Postgres 和 Golang 与 pgx 池:如何刷新密码?
问题描述
我有一个带有 postgres 的 RDS 实例,我通过 IAM 用户进行身份验证。密码是每 15 分钟刷新一次的令牌:
authToken, err := rdsutils.BuildAuthToken(Endpoint, "mars-east-4", "iamuser", envCredentials)
if err != nil {
return "", err
}
但是,我已经看到令牌过期后连接池引发身份验证错误的问题,并且我没有找到任何好的方法。
我在想的是创建一个函数GetPool
并将其注入到我的存储库中,这个函数将返回一个 Pool 对象pgxpool.Pool
:
func (p Pool) GetPool() (*pgxpool.Pool, error) {
config, err := p.getConfig()
if err != nil {
return nil, err
}
pool, err := pgxpool.ConnectConfig(context.Background(), config)
if err != nil {
return nil, err
}
return pool, nil
}
getConfig
内部将调用BuildAuthToken
,但仅每 15 分钟一次(伪代码):
if time > 15minutes {
return BuildAuthToken()
}
因此,如果 15 分钟过去了,我将重新感染令牌,否则我将使用我已经拥有的令牌。这将是最终的解决方案
func (p Pool) GetPool() (*pgxpool.Pool, error) {
// Pseudocode
if p.time < 15minutes {
return p.Pool, nil
}
config, err := p.getConfig()
if err != nil {
return nil, err
}
pool, err := pgxpool.ConnectConfig(context.Background(), config)
if err != nil {
return nil, err
}
p.Pool = pool
p.time = time.Now()
return pool, nil
}
那么这种方法效率低吗?有更好的方法吗?谢谢
解决方案
推荐阅读
- c++ - 图层不绘制另一个
- scheme - 在树中创建一个列表
- angular - Angular 6 升级:debounceTime 不是 Subject 的属性
- c++ - C ++使用迭代器访问向量的指针元素
- javascript - P5JS 声音仅在我离开活动选项卡时播放
- node.js - NodeJS:向 npmrc 添加选项
- java - 如何在 Eclipse Window Builder 中处理“运行 0 的不兼容 Java 版本”?
- scala - 寻找类似于 TestSink 和 TestSource 的 TestFlow
- neural-network - MobileNet 混淆矩阵
- android - 网格视图底部菜单