Я сделал следующее:
У меня есть каждая служба, генерирующая Оглавление при запуске, которая доступна как корневой ресурс (.../{service}/
).В этом ToC все конечные точки как Map.
Ключ является (общеизвестным) EndpointId, значение всегда состоит из
title
href
type
(mediaType)
Итак, в основном обычная ссылка.
Магия лежит в href
, где общедоступный хост (DNS) настраивается как переменная среды (например, Config Map).).Из-за использования DNS, LoadBalancing и т. Д. Вне конкуренции.Но вы могли бы использовать этот подход и для внутренних IP-адресов.
Это хорошая практика, упомянутая здесь .
API-интерфейс REST должен быть введен без каких-либо предварительных знаний.начальный URI (закладка) и набор стандартизированных типов мультимедиа, которые подходят для предполагаемой аудитории (т. е. ожидается, что будет понят любым клиентом, который может использовать API).С этого момента все переходы состояний приложения должны определяться выбором клиентом предоставленных сервером вариантов, которые присутствуют в полученных представлениях или подразумеваются манипуляциями пользователя с этими представлениями.Переходы могут быть определены (или ограничены) знаниями клиента о типах медиа и механизмах связи с ресурсами, которые могут быть улучшены на лету (например, код по запросу).[Ошибка здесь подразумевает, что внешняя информация является движущей силой взаимодействия, а не гипертекста.]
Таким образом, у каждой службы есть корневой ресурс, содержащий ссылки на все конечные точки (иногда шаблонные).
Тот же самый ToC используется повторно, публикуя его в теме Kafka, называемой «конечные точки», где key
- это (хорошо известный) ServiceId («fooService» или «fooService: 1.2.3») и value
является его ToC.
Каждый сервис также имеет доступ для чтения к теме (GlobalKTable), поэтому, когда он хочет создать ссылку на FooService, он ищет свой ToC в GlobalKTable, ищет конечную точку своейИдентификатор заменяет шаблонные переменные действительными значениями и выполняется, он не меняет type
, поскольку предполагается, что он правильный.
Крутая вещь здесь (из-за Kafkas GlobalKTable и QueryableKeyStores), чтокогда FooService изменяет свои конечные точки (только непрерывно), все другие службы автоматически создают новые ссылки.Изменение DNS или переименование сегментов пути будет просто работать.переименования параметров явно нет.