我目前正在构建一个使用acme/autocert的服务。要在超过一个副本中使用该服务,我必须编写一个像DirCache这样的持久缓存接口。然后我注意到,在重新启动服务之后,缓存中的所有有效证书在启动时都被忽略了。以下顺序一直在发生:
这行为正确吗?因为每个副本都会创建自己的cert,并且在这种情况下不可能有持久的缓存。
这是我的厂长
func NewManager(d *db.DynamoDB, staging bool) *Manager {
manager := &Manager{
CertCache: NewPersistentCertCache(d),
}
directoryURL := acme.LetsEncryptURL
if staging {
directoryURL = LetsEncryptStagingURL
log.Infof("Using CA staging environment")
}
log.Infof("CA URI %s", directoryURL)
client := &acme.Client{
DirectoryURL: directoryURL,
}
manager.AcmeManager = &autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: manager.AllowHostPolicy,
Cache: manager.CertCache,
Client: client,
}
return manager
}发布于 2018-11-21 11:46:39
这个问题的解决方案是高速缓存接口和行为正确工作。我的缓存实现是错误的。我在Cache.Get(.)从一个DB读取到一个通道,但不幸的是,外部函数体没有等待该通道,并且总是返回一个CacheMissed错误。修好后一切都很好。我的错
https://stackoverflow.com/questions/53337190
复制相似问题