Отделите проблемы масштабируемости от услуг

Я использую Spring RestTemplate для использования других сервисов в моей локальной среде.

В производственной среде для масштабируемости я хочу использовать реестр служб, такой как eureka и ленточный клиент.

Я хочу четко отделить свой код от eureka и ленточного клиента, чтобы я мог запускать свои службы локально без дополнительных затрат на запуск отдельной службы для eureka, регистрацию служб с помощью eureka, а также выполнение поиска по eureka во время оркестровки.

Я использовал функцию пружинного профиля, чтобы отделить код и конфигурацию, связанные с локальным и производственным.

Я застрял в одном месте, где я использую RestTemplate для вызова других служб.

Я хочу использовать шаблон отдыха с балансировкой нагрузки для prod env и обычный шаблон отдыха для локального вызова службы.

У меня возникают трудности с внедрением типа RestTemplate в зависимости от моей среды.

Может ли кто-нибудь помочь мне с правильным способом внедрения RestTemplate, чтобы мои службы могли работать локально, а также использовать реестр служб и ленточный клиент при работе в Prod env, не влияя на код.

Спасибо, Шри


person user6594900    schedule 21.07.2016    source источник


Ответы (1)


Профили

Используйте аннотацию @Profile в своем RestTemplate Bean.

Пример:

@Configuration
public class Config {

    @Profile("local")
    @Bean
    public RestTemplate restTemplateLocal(){
        return new RestTemplate();
    }

    @Profile("production")
    @LoadBalanced
    @Bean
    public RestTemplate restTemplateProduction(){
        return new RestTemplate();
    }

}

Затем вы можете автоматически связать этот bean-компонент в любом месте, где вам нужно, и на основе активного Profile он вернет либо обычный, либо LoadBalanced RestTemplate.

@Autowired
private RestTemplate restTemplate;
person Kyle Anderson    schedule 21.07.2016
comment
Спасибо за ваш ответ. Я воспользовался вашим предложением, но получаю сообщение об ошибке, когда поиск выполняется с помощью шаблона отдыха с балансировкой нагрузки. Я поделюсь кодом и сообщением об ошибке. вскоре. - person user6594900; 22.07.2016
comment
@ user6594900 Хорошо. Убедитесь, что при запуске приложения вы указываете активный профиль (например, локальный, производственный), иначе экземпляр bean-компонента RestTemplate не будет создан. - person Kyle Anderson; 22.07.2016
comment
@ user6594900 Чтобы включить профиль, попробуйте: java -Dspring.profiles.active=local -jar app.jar - person Kyle Anderson; 22.07.2016