ribbon的调用方式和Feign实现远程调用
一:Feign
创建FeignClient客户端
@FeignClient(name="product")//www.1b23.compublicinterfaceIProductClient{@GetMapping("/msg")StringproductMessage();@PostMapping("/product/listForOrder")List<ProductInfo>productInfoList(@RequestBodyList<String>productIdList);@PostMapping("/product/decreaseStock")voiddecreaseStock(List<CartDto>cartDtoList);}
@FeignClient(name = "product")
表示这个接口是Feign客户端,name表示应用名。
@PostMapping("/product/listForOrder")
和普通的Controller层调用写法一样,写的是调用的接口,这里的接口是指http://product//product/listForOrder
,和RestTemplate中的调用url一样。
使用FeignClient客户端。
在调用FeignClient的启动类上加上@EnableFeignClients
。
在其它类中注入IProductClient
接口,直接调用。
@AutowiredprivateIProductClientproductClient;@GetMapping("/getProductMsg")publicStringgetProductMsg(){Stringresponse=productClient.productMessage();log.info("response={}",response);returnresponse;}
注意,有时候会报找不到IProductClient
这个bean,此时就需要添加扫描包,这个问题在调用时经常遇到。
@EnableFeignClients(basePackages="com.springcloud.product.client")
二:ribbon
可以看到Feign 调用步骤比较繁琐,并且传参数以及经过zuul 问题较多
再来看看ribbon
只需要在implements 接口类里面引入一个ribbon 均衡,再方法中调用即可
/***www.1b23.com*/@Service@Transactional//开启事物publicclassUsersServiceImplimplementsUsersService{@AutowiredprivateLoadBalancerClientloadBalancerClient;//ribbon负载均衡器....../**保存用户*@parampd*@throwsException*/publicvoidsaveUser(PageDatapd)throwsException{usersMapper.saveUser(pd);pd.put("tokenKey",Tools.creatTokenKey("userAdd"));LoadBalancerUtil.responseByPost(this.loadBalancerClient,"fh-dbsync","user/add",pd);//请求数据库表同步微服务}}
"fh-dbsync" 是注册到eurake里面的服务名称,“user/add” 微服务的RequestMapping 完整路径 “pd” 就是map,存放参数用的
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。