预热订阅

Spring Cloud 应用默认是在首次进行服务调用时,才会对服务进行订阅。这会影响初次调用服务的性能,也可能会将一些错误延迟到运行时才被发现。Spring Cloud SOFA 提供了预热订阅的功能,可以在启动过程中完成服务的订阅,减少订阅逻辑对服务初次访问的性能影响。

预热订阅配置

预热订阅功能是自动开启的,如果您的应用中完全采用 OpenFeign 作为服务框架,您不需要做任何配置,Spring Cloud SOFA 会自动识别 OpenFeign 客户端并发起服务订阅。

如果您使用了 RestTemplate 等其他框架进行服务调用,Spring Cloud SOFA 无法识别到需要调用的服务。此时,您可以通过在application.properties文件中配置spring.cloud.sofa.discovery.warmUpServices来显式指定需要预热订阅的服务名称。示例如下: image.png

多个服务间通过半角逗号(,)进行分隔。预热订阅正常运行的情况下,您将在应用启动日志中看到以下信息:IN] C

image.png

如有多个需要预热的服务,则会依次进行订阅。

确认生效

SOFA 注册中心采用全异步化的方式进行订阅,因此订阅动作非常迅速。订阅完成后,还需要等待注册中心推送服务列表,这个过程通常会在秒级完成。当注册中心推送服务列表时,您将在应用启动日志中看到以下信息: CONFIG INFOimage.png

Spring Cloud SOFA 在进行服务订阅时,会订阅两份数据,一份是服务地址列表,一份是服务配置信息,因此应用在订阅成功后会收到注册中心的两份推送数据。以上图为例,日志显示收到了一个服务地址,但服务配置是空的。有关服务配置数据的用途请参见查看服务

重要

使用 SOFA 注册中心进行服务订阅时,每个服务必须收到至少一次服务列表信息和一次服务配置信息才算完整,缺少任一方数据,都不算推送成功。

关闭预热订阅

如果不希望采用预热订阅功能,您可以在application.properties文件中配置spring.cloud.sofa.discovery.warmUpEnabled值为false来关闭。关闭后,服务的订阅逻辑将回到 Spring Cloud 默认逻辑。

spring.cloud.sofa.discovery.warm-up-enabled=false