1. Введение в OpenFeign и ленту
Как упоминалось ранее, система в системе с микросервисной архитектурой будет разделена на небольшие модули для предоставления услуг по отдельности.Мы знаем, что мы можем использовать реестр (эврика), чтобы ощущать существование друг друга, но как сделать фактический вызов?
Здесь Spring Cloud OpenFeign и Ribbon делают именно это. Spring Cloud OpenFeign — это подпроект Spring Cloud, который предоставляет решение для вызова между службами в рамках микросервисной архитектуры. Это вызывается декларативным способом и интегрирует ленту для балансировки нагрузки.
2. Подготовьте
- подготовить услугу
существуетДоНапишите простую услугу в проекте заказа-услуги следующим образом, чтобы предоставить услугу для получения списка услуг заказа.
@RestController
@RequestMapping("order")
public class OrderController {
@Value("${server.port}")
private String port;
@GetMapping("list")
public String orderList() {
return "获取订单列表,端口:" + port;
}
}
- Инженерная структура:
- Создайте новый проект для имитации вызывающего абонента, я назвал его здесь web, как показано на рисунке:
И зарегистрируйте эту инженерную службу в eureka (обратите внимание на добавление зависимостей)
2. Использование Spring Cloud OpenFeign
- добавить зависимости
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- Добавьте аннотации, чтобы включить Feign Добавьте @EnableFeignClients в класс запуска
@SpringBootApplication
//开启feign
@EnableFeignClients
public class LinnWebApplication {
public static void main(String[] args) {
SpringApplication.run(LinnWebApplication.class, args);
}
}
-
написание кодаструктура
3.1 Сначала напишите интерфейс FeignCall (я написал его под пакетом feign)
@FeignClient(value = "ORDER-SERVICE") @Component public interface FeignCall { /** * 获取订单列表 * 注意这里 要和 order-service中的那个方法一致 ,并注意 访问路径 * @return */ @GetMapping("order/list") String orderList(); }
3.2 Вызов контроллера
@RestController @RequestMapping("feignCall") public class FeignCallController { @Autowired private FeignCall feignCall; @RequestMapping("orderList") public String orderList(){ //通过feign调用 return feignCall.orderList(); } }
-
вызов теста
Посетите localhost:8080/feignCall/orderList в своем браузере.
3. Лента проста в использовании
- добавить зависимости
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
- Внедрить RestTemplate Здесь я добавил его прямо в класс запуска
@SpringBootApplication
//开启feign
@EnableFeignClients
public class LinnWebApplication {
public static void main(String[] args) {
SpringApplication.run(LinnWebApplication.class, args);
}
/**
* @LoadBalanced 注解必须添加 否则会报 java.net.UnknownHostException 找不到服务名称
* @return
*/
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
-
написание кодаструктура
3.1 Сначала напишите класс RibbonCall (я написал его под пакетом ленты)
@Component public class RibbonCall { /** * 注入 restTemplate */ @Autowired private RestTemplate restTemplate; /** * 调用 订单服务 获取订单列表 * 直接在URL中写明 使用ORDER-SERVICE 表示订单服务,后接地址 * @return */ public String orderList(){ return restTemplate.getForObject("http://ORDER-SERVICE/order/list",String.class); } }
3.2 Вызов контроллера
@RestController @RequestMapping("ribbonCall") public class RibbonCallController { /** * 注入 RibbonCall */ @Autowired private RibbonCall ribbonCall; /** * 测试 * @return */ @RequestMapping("orderList") public String orderList(){ return ribbonCall.orderList(); } }
-
вызов теста доступ в браузереhttp://localhost:8080/ribbonCall/orderList
4. Тест выпуска конфигурации сервисного кластера
Порт предыдущего заказа-сервиса одиночный узел 9001, теперь перезапуск (укажите разные конфигурации с профилями) тот же порт сервиса 9002, который составляет кластер , аналогично, доступhttp://localhost:8080/feignCall/orderListилиhttp://localhost:8080/ribbonCall/orderList, вы увидите портОтображает 9001, 9002 вперед и назад. Это связано с тем, что при наличии нескольких узлов стратегия балансировки нагрузки по умолчанию для ленты — это механизм циклического перебора. Есть и другие стратегии, которые можно настроить самостоятельно, что будет видно позже.
【Ссылаться на】blog.CSDN.net/Солнечный остров/…