Наиболее полное объяснение SpringCloudAlibaba 5️⃣ Feign (рекомендуемая коллекция)

задняя часть Микросервисы Spring Cloud
Наиболее полное объяснение SpringCloudAlibaba 5️⃣ Feign (рекомендуемая коллекция)

🌈 Введение в колонку

    Спасибо за чтение, я надеюсь, что это может быть полезно для вас.Если есть какие-либо недостатки в сообщении в блоге, пожалуйста, оставьте сообщение в области комментариев или добавьте меня в личное представление на главной странице, чтобы пообщаться со мной в частном порядке. Я XiaoLin, мальчик, который может писать ошибки и петь рэп, В этой колонке в основном представлено самое распространенное решение для микросервисов, SpringCloudAlibaba, которое будет представлено в компонентах. Адрес столбца: SpringCloudAlibaba.

7. Удаленный вызов: притворяться

7.1 Введение в притворство

Feign — это декларативный псевдо-HTTP-клиент, предоставляемый Spring Cloud, который делает вызов удаленных служб таким же простым, как и вызов локальных служб, просто создайте интерфейс и добавьте аннотацию.

Nacos очень совместим с Feign, а Feign по умолчанию интегрирует Ribbon, поэтому использование Feign под Nacos по умолчанию обеспечивает эффект балансировки нагрузки.

7.2. Имитация реального боя

7.2.1 Добавление зависимостей

Добавьте зависимость Fegin в файл pom проекта shop-order-server.

<!--fegin组件-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

7.2.2. Добавление аннотаций

Нам нужно добавить аннотацию @EnableFeignClients в класс запуска, и только с этой аннотацией он будет сканироваться.

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients // 支持Feign
public class ShopOrderServerApp {
  public static void main(String[] args) {
    SpringApplication.run(ShopOrderServerApp.class,args);
  }

  @Bean
  @LoadBalanced
  public RestTemplate getInstance(){
    return new RestTemplate();
  }
}

7.2.3 Добавлен ProductFeignApi

Добавьте интерфейс к Shop-order-server.

// name指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
@FeignClient(name = "product-service")
public interface ProductFeignApi {
  @RequestMapping("/product")
  Product findById(@RequestParam("productId") Long productId);
}

7.2.4, модифицируйте контроллер

  @Autowired
  ProductFeignApi productFeignApi;
  @Override
  public Order getById(Long oid, Long pid) {
    Product product = productFeignApi.findById(pid);
    Order order = orderDao.getOne(oid);
    order.setPname(product.getPname());
    return order;
  }

7.3. Важные атрибуты Feign

Мы можем настроить свойства тайм-аута.

feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000

7.4. Принцип реализации имитации

  1. После запуска класс с аннотацией @FeignClient будет сканироваться в соответствии с @SpringBootApplication, настроенным для класса запуска, и для него будет создан прокси-объект.
  2. Получите интерфейс, реализованный прокси-классом, через отражение: ProductFeignApi.
  3. Получите аннотацию на интерфейсе через рефлексию и выньте атрибут name из центра аннотаций: product-service.
  4. Получите метод в интерфейсе через отражение и получите аннотацию @RequestMapping к методу в интерфейсе и выньте значение: /product.
  5. Также выньте значение из аннотации параметра в методе, это параметр, который мы передали: productId.
  6. Разделение пути:http://продукт-сервис/продукт?productId=1.
  7. Найдите соответствующую информацию об узле в соответствии со списком местных служб.
  8. Выберите узлы в соответствии с настроенной стратегией балансировки нагрузки ленты.
  9. Замените Product-Service соответствующей информацией об узле и портом.
  10. Используйте RestTemplate для отправки запросов.