Loading

openfegin远程调用

别乱想,想题。别念旧,念书。

简介

声明式远程调用

feign是一个声明式的HTTP客户端,原理就是给远程服务发HTTP请求。

那么为什么不直接使用HTTP请求进行调用呢?

让远程调用更加简单、规范。

使用示例

模拟会员服务远程调用优惠劵服务

  1. 先引入openfeign的远程调用依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 优惠劵模块编码(获取优惠劵)

@RequestMapping("/member/list")
public R membercoupons(){    //全系统的所有返回都返回R
   // 模拟去数据库查用户对于的优惠券
   CouponEntity couponEntity = new CouponEntity();
   couponEntity.setCouponName("满100-10");//优惠券的名字
   return R.ok().put("coupons",Arrays.asList(couponEntity));
}
  1. 声明openfeign远程调用客户端

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients(basePackages="com.xmh.gulimall.member.feign")//扫描接口方法注解
public class GulimallMemberApplication {
   public static void main(String[] args) {
       SpringApplication.run(GulimallMemberApplication.class, args);
  }
}
  1. 新建远程调用feign接口(每一个模块建立与之对应的调用接口)

@FeignClient("gulimall-coupon")//告诉spring cloud这个接口是一个远程客户端,要调用coupon服务(nacos中找到)
public interface CouponFeignService {

   // 远程服务的url
   @RequestMapping("/coupon/coupon/member/list")//注意写全优惠券类上还有映射
   public R membercoupons();//得到一个R对象


}
  1. controller远程调用测试

@Autowired
   private CouponFeignService couponFeignService; //注入刚才的CouponFeignService接口

   @RequestMapping("/coupons")
   public R coupons(){
       MemberEntity memberEntity = new MemberEntity();
       memberEntity.setNickname("会员昵称张三");
       R membercoupons = couponFeignService.membercoupons();

       return R.ok().put("member", memberEntity).put("coupons", membercoupons.get("coupons"));
  }
 

 

posted @ 2022-09-19 14:27  你比从前快乐;  阅读(47)  评论(0编辑  收藏  举报