Фон
Я хочу развернуть две версии одного и того же приложения и направить запросы к этим приложениям на основе их версий, другими словами, выпусков Canary.Обе версии приложения будут зарегистрированы в Eureka с одинаковым именем приложения.
Среда состоит из шлюза Zuul, обнаружения службы Eureka, ленты для балансировки нагрузки и Feign для внутренней связи между приложениями.Помимо этого есть два других приложения, App1 и App2.Когда приложение 1 получает запрос, оно выполняет вызов приложения 2 с использованием функции Feign.
Это изображение показывает тот поток, который я пытаюсь выполнить.
Мои мысли
Eureka имеет metadataMap , где могут быть установлены пары ключ / значение.Когда Canary-релиз либо App1, либо App2 развернут, на этой карте может быть установлено «canary = true».
После этого PR .Запрос будет отправлен на шлюз Zuul, где preFilter проверяет, установлен заголовок X-Canary-Test
или нет.Затем пользовательская Ribbon IRule выберет подмножество экземпляров из Eureka на основе того, был ли сделан запрос на выпуск Canary или нет.
Я также не уверен, как это будет работать с Feign.Если исходный запрос предназначен для релиза Canary, то я бы хотел, чтобы все последующие вызовы делались на релизы Canary, если они существуют.
Вопрос
- Будет ли это наилучшим способом?выполнить маршрутизацию через шлюз Zuul и, если да, как вы получите подмножество серверов / экземпляров от Eureka?
- Как это можно применить к клиентам Feign и убедиться, что выпуски Canary пытаются вызвать другие выпуски Canaryкоторые развернуты?