Feign 远程调用
1.添加feign依赖
2.启动类添加注解
@EnableFeignClients
触发 Feign 自动配置,扫描远程调用接口,创建动态代理对象
3.定义远程调用接口
/*
商品调用
声明式客户端接口--不需要写代码,feign会自己写
三步配置:
1.调用哪个模块
2.调用哪个路径
3.提交什么参数
*/
@FeignClient(name = "item-service")//写注册表中的名字,eureka会根据这个名字找到这个服务的地址
public interface ItemClient {
/*
spring mvc注解:
在这里起的作用是相反的作用--作为客户端去调用服务器
- controller 响应客户端调用
- 客户端接口 向服务器发送调用
*/
//获取商品列表
@GetMapping("/{orderId}")
JsonResult<List<Item>> getItems(@PathVariable("orderId") String orderId);
//减少商品库存
@PostMapping("/decreaseNumber")
JsonResult<?> decreaseNumber(@RequestBody List<Item> items);
}
- 这里就是feign的客户端,先是通过
@FeignClient(name = "item-service")
在eureka列表中找到要调用的服务,接着通过@GetMapping("/{orderId}")
找到对应的controller请求,再通过
JsonResult<List<Item>> getItems(@PathVariable("orderId") String orderId);
创建代理对象完成功能(个人理解)
4.在service实现类中注入这个接口完成服务调用
Ribbin 负载均衡和重试
1.添加依赖
- eureka中已经添加了Ribbon依赖
2.RestTemplate 设置 @LoadBalanced
@LoadBalanced
负载均衡注解,会对 RestTemplate
实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器
@EnableDiscoveryClient
@SpringBootApplication
public class Sp06RibbonApplication {
@LoadBalanced //负载均衡注解
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
之后会跟新重试