如何在运行时临时 fail/disable REST API?

How to temporarily fail/disable REST APIs at runtime?

我正在开发一项主要提供 2 API 的 REST 服务:PUT 请求和 GET 请求。 在灾难恢复期间,服务将处于无法接受新的 PUT 请求但仍可以为 GET 请求提供响应的状态。我正在查看如何在运行时临时 disable/fail 传入 PUT API 调用(通过返回 500 或 200 以外的任何内容),同时服务正在积极进行灾难恢复。该服务在负载均衡器后面的一组主机上运行,​​并启用了自动缩放。需要在所有主机上暂时禁用 PUT API 请求 运行 服务。

我在运行时更新配置时遇到了这个 post:java update properties file run time,但看起来这需要手动更新每台主机上的属性文件,这可能不是最佳选择我们有大量的主机运行服务。

想知道是否有其他方法可以实现此目的。提前致谢!

大多数情况下,Load-Balancer 放置在防火墙后面。如果您有权访问防火墙,则可以在开始灾难恢复之前设置一项任务,以便在防火墙中设置规则并阻止与目标服务或使用防火墙的方法的任何连接。 DR 完成后,设置任务为丢弃规则并允许连接。

这是 Redis 或任何其他消息代理的经典用例。

因此,您可以在 Redis 服务中创建一个通道。如果您的 API 进入灾难恢复,某些东西会发布一条消息。 API 的所有实例都订阅了该频道并接收消息,并将其缓存在某个地方。向您的路由添加一个中间件,用于检查每个请求的缓存值,如果应用程序处于灾难恢复中,则 returns 一个错误。然后,当您的应用程序不再处于灾难恢复中时,向 Redis 通道发送一条消息,使所有服务器从缓存中清除该值。

这种解决方案快速、简洁、简单且可靠。更改应用程序配置并不是您想要在运行时尝试做的事情。配置意味着稳定。这不是状态。