0

我有一个 spring boot rest 服务,其中配置值存储在 git 中并使用配置服务器获取。部署在 docker swarm 集群中完成,该服务将跨多个容器运行。所以我必须记住的一件事是,当调用执行器的刷新端点时,它会无缝地刷新该服务的所有容器,而不仅仅是任何随机容器。我相信这是一个非常明显的问题。

我可以使用消息代理在 git 中的配置更改时更新服务的配置值。但是,这需要时间,而现在时间并不在我身边。

我提出了两种快速解决方案,并希望根据您的经验来帮助您确定哪种方法比另一种更好。请记住,两者都有效,我对它们都进行了测试。

解决方案 1 在 Application.java 中使用 @Scheduled 创建一个调度程序,并保持每 5 秒 ping 一次执行器的刷新端点。我认为这在生产中非常昂贵且资源密集。

解决方案 2 在控制器方法本身中调用执行器的刷新端点。这样,我按需调用刷新端点,而不是像解决方案 1 那样继续轮询它并且浪费。它还将确保选择任何容器来服务请求,它会刷新自身,因为刷新端点调用只会刷新该容器引用的属性。

你对其中一个有什么偏好吗?您认为这些解决方案有什么优缺点吗?你会选择哪一个,为什么?

请让我知道您的想法。

4

1 回答 1

0

这听起来像是一个有趣的问题。此外,就像您指出的那样,Solution1是资源密集型的,不应在生产中使用。如果您的时间不多了,我建议您继续使用Solution2,它比以前更聪明。

但是,我认为解决这个问题的最佳方法是在 github 中使用 webhook。这样 github 将在生成特定事件时对您的预定义端点进行 API 调用。事件是 Github Webhooks 的核心。这是所有 github 事件的列表。选择最适合您要求的一种。https://developer.github.com/webhooks/#events

于 2018-05-01T04:28:23.550 回答