🌈 Введение в колонку
Спасибо за чтение, я надеюсь, что это может быть полезно для вас.Если есть какие-либо недостатки в сообщении в блоге, пожалуйста, оставьте сообщение в области комментариев или добавьте меня в личное представление на главной странице, чтобы пообщаться со мной в частном порядке. Я XiaoLin, мальчик, который может писать ошибки и петь рэп, В этой колонке в основном представлено самое распространенное решение для микросервисов, SpringCloudAlibaba, которое будет представлено в компонентах. Адрес столбца: SpringCloudAlibaba.
- Самое полное объяснение SpringCludalibaba из 3️⃣ ленты (рекомендуемая коллекция)
- SpringCloudalibaba — наиболее полное объяснение 3️⃣ Нако (рекомендуемая коллекция)
- Самое полное объяснение SpringCloudAlibaba во всей сети 2️⃣ (рекомендуемая подборка)
- Самое полное объяснение SpringCloudAlibaba во всей сети 1️⃣ (рекомендуемая подборка)
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. Принцип реализации имитации
- После запуска класс с аннотацией @FeignClient будет сканироваться в соответствии с @SpringBootApplication, настроенным для класса запуска, и для него будет создан прокси-объект.
- Получите интерфейс, реализованный прокси-классом, через отражение: ProductFeignApi.
- Получите аннотацию на интерфейсе через рефлексию и выньте атрибут name из центра аннотаций: product-service.
- Получите метод в интерфейсе через отражение и получите аннотацию @RequestMapping к методу в интерфейсе и выньте значение: /product.
- Также выньте значение из аннотации параметра в методе, это параметр, который мы передали: productId.
- Разделение пути:http://продукт-сервис/продукт?productId=1.
- Найдите соответствующую информацию об узле в соответствии со списком местных служб.
- Выберите узлы в соответствии с настроенной стратегией балансировки нагрузки ленты.
- Замените Product-Service соответствующей информацией об узле и портом.
- Используйте RestTemplate для отправки запросов.