【问题标题】:How to trigger a refresh event?如何触发刷新事件?
【发布时间】:2020-03-25 02:31:13
【问题描述】:

来自https://spring.io/guides/gs/centralized-configuration/

您可以通过使用 Spring Cloud Config @RefreshScope 注释 MessageRestController 然后触发刷新事件来强制 bean 刷新其配置(即从 Config Server 拉取更新的值)。

我们如何触发这个刷新事件(对于带有@ConfigurationProperties@RefreshScope 注释的类)?我们不想使用弹簧致动器/refresh 端点。 这里需要什么,应用程序从 configserver 获取配置?

【问题讨论】:

    标签: spring-boot spring-cloud-config


    【解决方案1】:

    您可以使用自动连接的ApplicationEventPublisher 触发RefreshEvent。 Spring Cloud 在RefreshEventListener中有一个监听这个事件的@

    @Autowired
    private ApplicationEventPublisher eventPublisher;
    
    public void fireRefreshEvent() {
      eventPublisher.publishEvent(new RefreshEvent(this, "RefreshEvent", "Refreshing scope");
    }
    

    参考资料:

    1st Reference

    2nd reference

    【讨论】:

      【解决方案2】:

      RefreshEndpoint bean 可以自动装配并用于刷新云配置

      【讨论】:

        【解决方案3】:

        要刷新所有微服务的配置属性,您可以通过消息代理(Spring 云总线)发布对所有微服务的更改。

        参考:

        https://springbootdev.com/2018/07/17/spring-cloud-config-refreshing-the-config-changes-with-spring-cloud-bus-part-2/

        【讨论】:

        • 我们已经有一个在服务实例中接收触发器的实现,它可能已经发生了配置更改。我们只需要知道,如何以编程方式触发实例,然后联系配置服务器并获取新配置(我们认为这是通过 http 工作的)。
        • 是的,它只是一个 HTTP 调用。然后为此在您的配置服务器中添加一个@Component 类并添加一个@PostConstruct 方法。在该方法中,使用发现客户端从服务发现中获取所有服务,并在所有特定微服务中点击刷新端点。
        • 但是我们如何以编程方式触发从客户端实例到配置服务器的调用(基本上是执行器端点上的/refresh 会做什么)?
        • /refresh 端点会重新调用配置服务器,以便新更新的属性将驻留在您的微服务中。
        • 是的,但是我们可以避免使用/refresh 端点吗?我们能否以编程方式触发该端点正在执行的相同操作?你知道我们这里要注入和使用哪个bean吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        相关资源
        最近更新 更多