ribbon的调用方式和Feign实现远程调用
一:Feign
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了普兰免费建站欢迎大家使用!
创建FeignClient客户端
@FeignClient(name = "product")//www.1b23.com public interface IProductClient { @GetMapping("/msg") String productMessage(); @PostMapping("/product/listForOrder") ListproductInfoList(@RequestBody List productIdList); @PostMapping("/product/decreaseStock") void decreaseStock(List cartDtoList); }
@FeignClient(name = "product")
表示这个接口是Feign客户端,name表示应用名。@PostMapping("/product/listForOrder")
和普通的Controller层调用写法一样,写的是调用的接口,这里的接口是指http://product//product/listForOrder
,和RestTemplate中的调用url一样。
使用FeignClient客户端。
在调用FeignClient的启动类上加上
@EnableFeignClients
。在其它类中注入
IProductClient
接口,直接调用。
@Autowired private IProductClient productClient; @GetMapping("/getProductMsg") public String getProductMsg(){ String response = productClient.productMessage(); log.info("response={}",response); return response; }
注意,有时候会报找不到IProductClient
这个bean,此时就需要添加扫描包,这个问题在调用时经常遇到。
@EnableFeignClients(basePackages = "com.springcloud.product.client")
二:ribbon
可以看到 Feign 调用步骤比较繁琐,并且传参数以及经过zuul 问题较多
再来看看ribbon
只需要在 implements 接口类里面引入一个 ribbon 均衡,再方法中调用即可
/** * www.1b23.com */ @Service @Transactional //开启事物 public class UsersServiceImpl implements UsersService { @Autowired private LoadBalancerClient loadBalancerClient;//ribbon负载均衡器 ...... /**保存用户 * @param pd * @throws Exception */ public void saveUser(PageData pd)throws Exception { 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,存放参数用的
当前文章:ribbon的调用方式和Feign实现远程调用
URL分享:http://scyanting.com/article/jhhpde.html