测试member和coupon的远程调用
想要获取当前会员领取到的所有优惠券。先去注册中心找优惠券服务,注册中心调一台优惠券服务器给会员,会员服务器发送请求给这台优惠券服务器,然后对方响应。Feign与注册中心spring cloud feign声明式远程调用feign是一个声明式的HTTP客户端,他的目的就是让远程调用更加简单。给远程服务发的是HTTP请求。1 会员服务想要远程调用优惠券服务,只需要给会员服务里引入openfeign依赖,他就有了远程调用其他服务的能力。<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>2 在coupon中修改如下的内容@RequestMapping("coupon/coupon")public class CouponController { @Autowired private CouponService couponService; @RequestMapping("/member/list") public R membercoupons(){ //全系统的所有返回都返回R // 应该去数据库查用户对于的优惠券,但这个我们简化了,不去数据库查了,构造了一个优惠券给他返回 CouponEntity couponEntity = new CouponEntity(); couponEntity.setCouponName("满100减10");//优惠券的名字 return R.ok().put("coupons",Arrays.asList(couponEntity)); }3 这样我们准备好了优惠券的调用内容在member的配置类上加注解@EnableFeignClients(basePackages="com.yxj.gulimall.member.feign"),告诉spring这里面是一个远程调用客户端,member要调用的接口package com.yxj.gulimall.member;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication@MapperScan("com.yxj.gulimall.member.dao")@EnableDiscoveryClient@EnableFeignClients(basePackages="com.yxj.gulimall.member.feign")public class GulimallMemberApplication { public static void main(String[] args) { SpringApplication.run(GulimallMemberApplication.class, args); }}4 那么要调用什么东西呢?就是我们刚才写的优惠券的功能,复制函数部分,在member的com.yxj.gulimall.member.feign包下新建类:package com.yxj.gulimall.member.feign;import com.yxj.common.utils.R;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.RequestMapping;@FeignClient("gulimall-coupon") //告诉spring cloud这个接口是一个远程客户端,要调用coupon服务,再去调用coupon服务/coupon/coupon/member/list对应的方法public interface CouponFeignService { @RequestMapping("/coupon/coupon/member/list") public R membercoupons();//得到一个R对象}5 然后我们在member的控制层写一个测试请求@RestController@RequestMapping("member/member")public class MemberController { @Autowired private MemberService memberService; @Autowired CouponFeignService couponFeignService; @RequestMapping("/coupons") public R test(){ MemberEntity memberEntity = new MemberEntity(); memberEntity.setNickname("张三"); R membercoupons = couponFeignService.membercoupons(); //假设张三去数据库查了后返回了张三的优惠券信息 // 打印会员和优惠券信息 return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons")); }6 重新启动服务http://localhost:8000/member/member/coupons{"msg":"success","code":0,"coupons":[{"id":null,"couponType":null,"couponImg":null,"couponName":"满100减10","num":null,"amount":null,"perLimit":null,"minPoint":null,"startTime":null,"endTime":null,"useType":null,"note":null,"publishCount":null,"useCount":null,"receiveCount":null,"enableStartTime":null,"enableEndTime":null,"code":null,"memberLevel":null,"publish":null}],"member":{"id":null,"levelId":null,"username":null,"password":null,"nickname":"张三","mobile":null,"email":null,"header":null,"gender":null,"birth":null,"city":null,"job":null,"sign":null,"sourceType":null,"integration":null,"growth":null,"status":null,"createTime":null}}7 上面内容很重要,我们停留5分钟体会一下。coupon里的R.ok()是什么 # coupon里的控制层就是new了个couponEntity然后放到hashmap(R)里而已。public class R extends HashMap<String, Object> { public static R ok() { return new R(); } public R put(String key, Object value) { super.put(key, value); return this; }}