Регистрация и обнаружение службы | Начало работы с Spring Cloud Eureka и Feign (3)

Микросервисы Spring Cloud
Регистрация и обнаружение службы | Начало работы с Spring Cloud Eureka и Feign (3)

Это 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 для упрощения вышеуказанных шагов.

image.png

3.2 Притворство Введение

FeignРазработанный для упрощения клиента HTTP API, это декларативный клиент веб-службы. Fegin — это связыватель клиента Java, который вызывает HTTP, вдохновленный Retrofit, JAXRS-2.0 и WebSocket.

Использование Feign упрощает написание клиентов веб-служб. Его метод использования заключается в определении интерфейса, а затем добавлении к нему аннотаций. Он также поддерживаетJAX-RSСтандартные аннотации и Feign также поддерживают подключаемые кодировщики и декодеры.

Так как же работает Feign? Проще говоря, Feign работает путем преобразования аннотаций в шаблоны запросов, а параметры просто применяются непосредственно к шаблону. Конкретный принцип подробно не объясняется.

Как и в приведенном выше примере без Feign, диаграмма цепочки вызовов после использования Feign выглядит следующим образом.

image.png

Как и 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.

screenshot-127-0-0-1-8761-1636963294276.png

тогда посетитеhttp://{yourhost}:8080/get-greeting, то есть получитьhello...Ответ указывает, что цепочка вызовов беспрепятственна.

В этом примере балансировка нагрузки не введена, если вы хотите это сделать, введитеRibbonПосле зависимости в том месте, где код вызывает службу, можно нормально вызвать удаленную службу.

    @Autowired
    private RemoteCallService loadBalancer;
    
    #服务方法中这样使用去调用远程方法去获取数据
    data tmp = loadBalancer.getData(); 

4. Резюме

Для сравнения, вся эта статья относительно проста, и начать работу с ней несложно, потому что вся серия в основном основана на вводных учебных пособиях, чтобы читатели могли понять, почему предоставляются эти распределенные компоненты, и мы можем использовать их для того, что делать. . Есть еще много центров регистрации сервисов, таких как Zuul, ZK и т. д. В следующих уроках они будут рассмотрены один за другим, так что следите за обновлениями!


Мальчик, ты не можешь видеть достаточно? Нажмите на домашнюю страницу камня, просто нажмите и посмотрите, может быть, будет сюрприз? Добро пожаловать в поддержкуНравится/подписывайтесь/комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!