Это 10-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.
Продолжить предыдущую статью«Начало работы с Spring Cloud Eureka и Feign (2)», последняя статья успешно запустила реестр поставщика услуг, эта статья основана на Feign для обнаружения и использования услуг.
3. Притворяться
В этой главе мы будем говорить о Feign последовательно с трех сторон: во-первых, если Feign не будет, как мы будем вызывать службы реестра, во-вторых, что такое Feign и какие удобства он нам может принести? В-третьих, как начать работу с Feign.
3.1 Без притворства
Почему Feign Если мы не используем Feign, как мы можем вызвать сервис, зарегистрированный на Eureka?
Если Feign не используется, чтобы обеспечить нормальное обнаружение и вызов службы, мы должны выполнить следующие основные шаги:
- Первый шаг, используйте
Ribbon
балансировки нагрузки - Второй шаг — получить экземпляр службы и получить корневой URL-адрес, а затем собрать воедино URL-адрес метода.
- Третий шаг, наконец, используйте шаблон REST или другие методы для использования указанной службы.
Для первого шага используйтеRibbon
Получите экземпляр службы, приблизительный код выглядит следующим образом.
@Autowired
private LoadBalancerClient loadBalancer;
pulic void method(){
ServiceInstance serviceInstance=loadBalancer.choose("producer");
}
Для второго шага приблизительный код выглядит следующим образом:
pulic void method(){
String baseUrl=serviceInstance.getUri().toString();
baseUrl=baseUrl+"/targetURL";
}
Наконец, для третьего шага выполните доступ и получите результат.Примерный код выглядит следующим образом.
pulic void method(){
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}catch (Exception ex)
{
System.out.println(ex);
}
System.out.println(response.getBody());
}
Во всем процессе вызова это очень сложно, нам также нужно иметь дело с некоторыми нулевыми исключениями и т. д. Мы можем использовать Feign для упрощения вышеуказанных шагов.
3.2 Притворство Введение
Feign
Разработанный для упрощения клиента HTTP API, это декларативный клиент веб-службы. Fegin — это связыватель клиента Java, который вызывает HTTP, вдохновленный Retrofit, JAXRS-2.0 и WebSocket.
Использование Feign упрощает написание клиентов веб-служб. Его метод использования заключается в определении интерфейса, а затем добавлении к нему аннотаций. Он также поддерживаетJAX-RS
Стандартные аннотации и Feign также поддерживают подключаемые кодировщики и декодеры.
Так как же работает Feign? Проще говоря, Feign работает путем преобразования аннотаций в шаблоны запросов, а параметры просто применяются непосредственно к шаблону. Конкретный принцип подробно не объясняется.
Как и в приведенном выше примере без Feign, диаграмма цепочки вызовов после использования Feign выглядит следующим образом.
Как и Eureka, Spring Cloud также предоставляет удобныйOpenFeign Starter
, мы увидим, как использовать Netflix Feign, чтобы упростить и упростить обнаружение и вызов служб.
3.3 Начало работы
Здесь мы будем использовать реестр служб, представленный в предыдущей статье, и поставщика служб.
Сначала создайте новый модуль и импортируйте связанные зависимости.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Обратите внимание, что нам все еще нужно ввести зависимости Eureka Client, потому что мы хотим обнаружить службы, предоставляемые Eureka.
Затем предоставьте тот же интерфейс, что и для вызова службы.GreetingClient
.
@FeignClient("spring-cloud-eureka-client")
public interface GreetingClient {
@GetMapping("/greeting")
String greeting();
}
Поэтому здесь возникает проблема: поставщик услуг и потребитель должны декларировать один и тот же набор интерфейсов, согласно лучшей инженерной практике рекомендуется абстрагировать эту часть интерфейса как отдельный интерфейс.Modeling
, а затем соответствующий поставщик услуг и потребитель представляют этот пакет.
Следующим шагом является написание класса запуска и веб-службы.Для удобства напишите и то, и другое в классе запуска.Launcher
Бар.
@SpringBootApplication
@EnableFeignClients
@RestController
public class Launcher {
@Autowired
private GreetingClient greetingClient;
public static void main(String[] args) {
SpringApplication.run(Launcher.class,args);
}
@GetMapping("/get-greeting")
public String greeting(){
return greetingClient.greeting();
}
}
application.yml
Информация о конфигурации следующая.
spring:
application:
name: spring-cloud-eureka-feign-client
server:
port: 8080
eureka:
client:
serviceUrl:
defaultZone: ${EUREKA_URI:http://localhost:8761/eureka}
Затем запустите службу потребителей и посмотрите на страницу управления Eureka.Вы можете видеть, что потребитель также зарегистрирован в реестре Eureka.
тогда посетитеhttp://{yourhost}:8080/get-greeting
, то есть получитьhello...
Ответ указывает, что цепочка вызовов беспрепятственна.
В этом примере балансировка нагрузки не введена, если вы хотите это сделать, введитеRibbon
После зависимости в том месте, где код вызывает службу, можно нормально вызвать удаленную службу.
@Autowired
private RemoteCallService loadBalancer;
#服务方法中这样使用去调用远程方法去获取数据
data tmp = loadBalancer.getData();
4. Резюме
Для сравнения, вся эта статья относительно проста, и начать работу с ней несложно, потому что вся серия в основном основана на вводных учебных пособиях, чтобы читатели могли понять, почему предоставляются эти распределенные компоненты, и мы можем использовать их для того, что делать. . Есть еще много центров регистрации сервисов, таких как Zuul, ZK и т. д. В следующих уроках они будут рассмотрены один за другим, так что следите за обновлениями!
Мальчик, ты не можешь видеть достаточно? Нажмите на домашнюю страницу камня, просто нажмите и посмотрите, может быть, будет сюрприз? Добро пожаловать в поддержкуНравится/подписывайтесь/комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!