别乱想,想题。别念旧,念书。
简介
声明式远程调用
feign是一个声明式的HTTP客户端,原理就是给远程服务发HTTP请求。
那么为什么不直接使用HTTP请求进行调用呢?
让远程调用更加简单、规范。
使用示例
模拟会员服务远程调用优惠劵服务
-
先引入openfeign的远程调用依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
-
优惠劵模块编码(获取优惠劵)
@RequestMapping("/member/list")
public R membercoupons(){ //全系统的所有返回都返回R
// 模拟去数据库查用户对于的优惠券
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满100-10");//优惠券的名字
return R.ok().put("coupons",Arrays.asList(couponEntity));
}
-
声明openfeign远程调用客户端
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients(basePackages="com.xmh.gulimall.member.feign")//扫描接口方法注解
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
-
新建远程调用feign接口(每一个模块建立与之对应的调用接口)
@FeignClient("gulimall-coupon")//告诉spring cloud这个接口是一个远程客户端,要调用coupon服务(nacos中找到)
public interface CouponFeignService {
// 远程服务的url
@RequestMapping("/coupon/coupon/member/list")//注意写全优惠券类上还有映射
public R membercoupons();//得到一个R对象
}
-
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"));
}
标签:openfegin,调用,coupon,membercoupons,public,远程,coupons From: https://www.cnblogs.com/l12138h/p/16707582.html