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 //负载均衡注解@Beanpublic RestTemplate getRestTemplate() {
return new RestTemplate();}
之后会跟新重试