温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ribbon的调用方式和Feign实现远程调用

发布时间:2020-05-25 17:30:24 来源:亿速云 阅读:518 作者:鸽子 栏目:编程语言

一:Feign

创建FeignClient客户端

@FeignClient(name = "product")//www.1b23.com public interface IProductClient {     @GetMapping("/msg")     String productMessage();     @PostMapping("/product/listForOrder")     List<ProductInfo> productInfoList(@RequestBody List<String> productIdList);     @PostMapping("/product/decreaseStock")     void decreaseStock(List<CartDto> cartDtoList); }

  • @FeignClient(name = "product")表示这个接口是Feign客户端,name表示应用名。

  • @PostMapping("/product/listForOrder")和普通的Controller层调用写法一样,写的是调用的接口,这里的接口是指http://product//product/listForOrder,和RestTemplate中的调用url一样。

  1. 使用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,存放参数用的

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI