6
我正在运行一个Beego应用程序,它依靠/ etc/hosts中的更新(通过Docker链接)来查找其他服务器。/etc/hosts更新正常,但应用程序不会使用新主机,除非重新启动或等待时间过长。在查看src/net/hosts的文档后,它看起来像锁定了5分钟的刷新时间。有没有办法强制刷新主机?
有没有办法强制这个缓存刷新,或者我看错了这个问题?
我正在运行一个Beego应用程序,它依靠/ etc/hosts中的更新(通过Docker链接)来查找其他服务器。/etc/hosts更新正常,但应用程序不会使用新主机,除非重新启动或等待时间过长。在查看src/net/hosts的文档后,它看起来像锁定了5分钟的刷新时间。有没有办法强制刷新主机?
有没有办法强制这个缓存刷新,或者我看错了这个问题?
The hosts file cache time in Go was shortened to 5 seconds. Go的行为与使用纯Go(默认值,带例外)还是Cgo解析器不同。为了避免纯Go解析器的Go内部缓存,除强制Cgo解析器之外,目前没有其他办法。
There are various ways to force Go to use the Cgo resolver.way to force Go to use the Cgo resolver suggested by the documentation是将环境变量GODEBUG
设置为netdns=cgo
。
我没有看到没有组装的方式。 – thwd
我可以在src/net/hosts.go中更改超时常量,然后滚动我自己定制的内部版本,但必须有另一种方式。很高兴看到我不是唯一一个,但坚持在这一个。 – Diablojoe
通常情况下,动态更改应该通过另一种机制完成,如dns或其他配置数据库。如果您在启用cgo的情况下构建二进制文件,它将使用系统解析程序来查找主机(这也不能保证系统在短时间内不会缓存它,但在大多数情况下通常少于5分钟) – JimB