【问题标题】:Separate scalabilty concerns from services将可伸缩性问题与服务分开
【发布时间】:2016-07-21 15:17:12
【问题描述】:

我使用 Spring RestTemplate 来消费本地环境中的其他服务。

在可扩展性的生产环境中,我想使用像 eureka 和功能区客户端这样的服务注册表。

我希望我的代码与 eureka 和功能区客户端完全分离,这样我就可以在本地运行我的服务,而无需为 eureka 运行单独的服务、向 eureka 注册服务以及在期间对 eureka 进行查找的开销编排。

我已经使用spring profile功能分离出本地和生产相关的代码和配置。

我被困在使用 RestTemplate 调用其他服务的地方。

我想为 prod env 使用负载平衡的 rest 模板,为本地服务调用使用 normal rest 模板。

我很难根据我的环境注入 RestTemplate 的类型。

有人可以帮助我注入 RestTemplate 的正确方法,以便我的服务可以在本地运行,并在 Prod 环境中运行时利用服务注册表和功能区客户端而不影响代码。

谢谢, 斯里

【问题讨论】:

    标签: spring-boot scalability resttemplate netflix-eureka netflix-ribbon


    【解决方案1】:

    Profiles

    在您的 RestTemplate Bean 上使用 @Profile 注释。

    例子:

    @Configuration
    public class Config {
    
        @Profile("local")
        @Bean
        public RestTemplate restTemplateLocal(){
            return new RestTemplate();
        }
    
        @Profile("production")
        @LoadBalanced
        @Bean
        public RestTemplate restTemplateProduction(){
            return new RestTemplate();
        }
    
    }
    

    然后您可以根据活动的Profile 在任何需要的地方自动装配此 bean,它将返回正常或 LoadBalanced RestTemplate。

    @Autowired
    private RestTemplate restTemplate;
    

    【讨论】:

    • 感谢您的回复。我已经使用了您的建议,但是当使用负载平衡的 resttemplate 完成查找时,我收到了错误消息。我将分享代码和错误消息。很快。
    • @user6594900 好的。确保在运行应用程序时指定一个活动配置文件(例如本地、生产),否则不会实例化任何 RestTemplate bean。
    • @user6594900 要启用配置文件,请尝试:java -Dspring.profiles.active=local -jar app.jar
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多