ВЕСЕННЕЕ ОБЛАКО | МИКРОСЕРВИСЫ
Аннотации Spring Cloud упрощены
В Spring Cloud есть полезные аннотации, которые стоит знать для разработки микросервисов.

Модуль Spring Cloud — отличное расширение оригинальной среды Spring, предоставляющее разработчикам инструменты для быстрого создания некоторых распространенных шаблонов в распределенных системах, таких как обнаружение сервисов, автоматические выключатели, интеллектуальная маршрутизация, управляющая шина, токены и т. д.
Как и в Spring Boot, в Spring Cloud также есть несколько полезных аннотаций, которые стоит знать разработчикам Spring Cloud.
Енаблеконфигсервер
@EnableConfigServer — это аннотация на уровне класса. Это помогает очень легко встроить Spring Cloud Config Server в приложение Spring Boot, а аннотация @EnableConfigServer позволяет приложению Spring Boot действовать как сервер конфигурации.

ВключитьEurekaServer
В большом приложении у нас может быть множество микросервисов, которые должны работать вместе. Эти службы могут иметь разные адреса серверов. Итак, теперь мы столкнулись с серьезной проблемой: как сервисы будут общаться друг с другом. Простым хаком может быть жесткое кодирование всех адресов служб, включая порт, при вызове с использованием RestTemplate или WebClient.
Но это считается плохой практикой, потому что у одной службы может быть несколько экземпляров, работающих с разными адресами, поэтому в этом случае как мы узнаем, какие экземпляры подключать.
Для решения этой конкретной проблемы мы можем использовать Service Discovery через Eureka.
Мы можем преобразовать приложение Spring Boot в сервер Eureka, аннотировав класс с помощью @EnableEurekaServer. Теперь мы можем использовать этот сервер для просмотра других служб Eureka Client для управления ими. Службы должны быть зарегистрированы на этом сервере.
ВключитьEurekaClient
Сервер Eureka не может найти другие службы/клиенты, если службы/клиенты не снабжены аннотацией @EnableEurekaClient, которая исходит от spring-cloud-netflix. Каждая служба, которую мы хотим зарегистрировать на сервере, должна быть снабжена аннотацией @EnableEurekaClient. Это аннотация на уровне класса.
Включить клиент обнаружения
@EnableDiscoveryClient, происходящее от spring-cloud-commons, совпадает с @EnableEurekaClient, но представляет собой более общую реализацию «службы обнаружения ».
@EnableEurekaClientработает только с Eureka, тогда как @EnableDiscoveryClientработает с eureka, >консул, смотритель зоопарка. Но если Eureka находится в пути к классам приложения, они фактически одинаковы.
Включить прерыватель цепи
Предположим, что в приложении Movie Rental у нас есть три микрослужбы: MovieCatalogService, MovieRatingService и MovieOrderService.
И эти микросервисы должны взаимодействовать друг с другом для обработки запросов пользователей. Например, MovieOrderService может вызвать MovieCatalogService и MovieRatingService для отображения названия фильма (из MovieCatalogService ) и рейтинга фильма (из MovieRatingService ) вместе с заказами (из MovieOrderService) для отображения пользователю в процессе проката фильма.
Предположим, по какой-то причине (ошибка сети или перегрузка) MovieCatalogService полностью выходит из строя и перестает обслуживать запросы. В результате вся экосистема станет нестабильной из-за этой единственной точки отказа.
В этой ситуации пригодится шаблон автоматического выключателя. Он перенаправляет трафик на резервный путь, как только увидит любой такой сценарий. @EnableCircuitBreaker — это аннотация на уровне класса, и нам нужно применить эту аннотацию к каждой службе вашего приложения.
Существует множествоинструментов (Netflix Hystrix, Resilience4J, Sentinel, Spring Retry), доступных для реализации шаблона прерывателя цепи в Spring. Но в этом посте мы обсудим общие аннотации Netflix Hystrix.
EnableHystrix и EnableHystrixDashboard
@EnableHystrix является необязательным. @EnableCircuitBreakerпросканирует путь к классам на наличие любой совместимой реализации прерывателя цепи. Если Hystrix находится в пути к классам, нам не нужно явно включать Hystrix.
@EnableHystrixDashboard добавляет одну полезную панель мониторинга, работающую на локальном хосте, предоставленном Hystrix, для отслеживания ее состояния.
HystrixCommand
Мы включили резервный метод @HystrixCommand(fallbackMethod = “getMovieOrdersFallback”) с той же подписью. Теперь резервный метод будет вызываться, если фактическая служба заказа фильмов по какой-либо причине не работает.
LoadBlanced
@LoadBalanced – это маркерная аннотация. Он используется для указания того, что RestTemplate или WebClient должны использовать RibbonLoadBalancerClient или LoadBalancerClient для взаимодействия со службами. В свою очередь, это позволяет использовать «логические идентификаторы» для URL-адресов, которые мы передаем в RestTemplate или WebClient. Эти логические идентификаторы обычно являются именем службы, зарегистрированной в службе обнаружения.
Примечание: – @RibbonClient(spring-cloud-starter-netflix-ribbon) и @LoadBalancerClient(spring- cloud-commons) являются необязательными. Это работает как балансировщик нагрузки на стороне клиента и дает нам контроль над клиентами HTTP и TCP. Если мы используем Service Discovery, мы можем использовать настройки по умолчанию. нам не нужно явно использовать эти аннотации.
Но если мы не используем обнаружение служб или нам нужно настроить параметры ленты или LoadBalancer для конкретного клиента, нам нужно использовать любой из них.
name— служба, которую мы называем Ribbon или LoadBlancer, но нам нужны дополнительные настройки взаимодействия Ribbon или LoadBlancer с этой службой.configuration— установите его в класс@Configurationсо всеми нашими настройками, определенными как@Beans .
Этот пост полезен для вас? Не забудьте похлопать под этим постом и вдохновить нас!
ВЫ заинтересованы в разработке Fullstack?
Я пишу о пошаговых руководствах по написанию кода для полнофункциональной веб-разработки REST API, микросервисов, архитектуры в LinkedIn и Medium. Вот мой профиль Linkedin.