测试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(){ |
| |
| 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") |
| public interface CouponFeignService { |
| @RequestMapping("/coupon/coupon/member/list") |
| public R membercoupons(); |
| } |
| |
| 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: |
| {"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; |
| } |
| |
| } |