Весенняя загрузка микро сервисной архитектуры находит количество экземпляров сервиса - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь настроить микросервисную архитектуру, используя spring boot.Я создал его, разделив компоненты и используя такие методы, как ribbon, eureka naming server, zuul API и т. Д.

service1 чтение входных данных из БД и вызов service2 через ленту, эврику и зуул,

List<Object> inputs= ...
for(Object input: inputs){
    service2Proxy.process(input); // calling service 2
}

Можно ли вызвать service2 в зависимости от количества доступных экземпляров service2?то есть, если есть 3 экземпляра service2, доступных одновременно, мне нужно вызвать только 3 запроса к service2 одновременно.

Каково решение этой проблемы?

1 Ответ

0 голосов
/ 27 августа 2018

Если вы используете LoadBalancerClient напрямую (с помощью автоматического подключения), а затем используете LoadBalancerClient.choose(serviceId), то вы можете получить ServiceInstance, который он возвращает.Это содержит URI службы.Поэтому после каждого вызова сохраняйте этот URI в наборе URI и перед повторным вызовом проверяйте, не использовали ли вы уже экземпляр сервера. Если все серверы были исчерпаны, дождитесь дальнейших вводов.Когда вы будете готовы обработать снова, очистите набор и повторите.Как объясняется в документации здесь , код будет выглядеть примерно так:

@Autowired
    private LoadBalancerClient loadBalancer;

    public void doStuff() {
        ServiceInstance instance = loadBalancer.choose("stores");
        URI serverUri = instance.getUri();
     // use you logic here
        URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));

    }
...