Циклическая балансировка нагрузки Zuul работает только так, как объявлено в рамках обновления клиента обнаружения, которое по умолчанию происходит каждые несколько секунд.
Когда Zuul обновляет свой клиент обнаружения, список экземпляров сервера случайным образом перемешивается кодом в com.netflix.discovery.shared.Applications
и не может быть настроен. Это перемешивание нарушает логику с состоянием в com.netflix.loadbalancer.RoundRobinRule
, которая поддерживает «последнюю позицию» в списке серверов, поэтому она может выполнять свою циклическую логику.
Помните об этом, когда вы реализуете свое собственное правило, которое выбирает сервер. Возможно, вам придется отсортировать по идентификатору экземпляра или что-то в этом роде, чтобы отменить случайное перемешивание, которое сделал клиент обнаружения.
Чтобы реализовать свое собственное правило, вам просто нужно предоставить компонент, который реализует com.netflix.loadbalancer.IRule
. Мы продлили абстрактный класс com.netflix.loadbalancer.AbstractLoadBalancerRule
. В методе choose()
вы выполняете свою работу.