测试member和coupon的远程调用

  1. 想要获取当前会员领取到的所有优惠券。先去注册中心找优惠券服务,
  2. 注册中心调一台优惠券服务器给会员,会员服务器发送请求给这台优
  3. 惠券服务器,然后对方响应。
  4. Feign与注册中心
  5. spring cloud feign
  6. 声明式远程调用
  7. feign是一个声明式的HTTP客户端,他的目的就是让远程调用更加简单。
  8. 给远程服务发的是HTTP请求。
  9. 1 会员服务想要远程调用优惠券服务,只需要给会员服务里引入
  10. openfeign依赖,他就有了远程调用其他服务的能力。
  11. <dependency>
  12. <groupId>org.springframework.cloud</groupId>
  13. <artifactId>spring-cloud-starter-openfeign</artifactId>
  14. </dependency>
  15. 2 coupon中修改如下的内容
  16. @RequestMapping("coupon/coupon")
  17. public class CouponController {
  18. @Autowired
  19. private CouponService couponService;
  20. @RequestMapping("/member/list")
  21. public R membercoupons(){ //全系统的所有返回都返回R
  22. // 应该去数据库查用户对于的优惠券,但这个我们简化了,不去数据库查了,构造了一个优惠券给他返回
  23. CouponEntity couponEntity = new CouponEntity();
  24. couponEntity.setCouponName("满100减10");//优惠券的名字
  25. return R.ok().put("coupons",Arrays.asList(couponEntity));
  26. }
  27. 3 这样我们准备好了优惠券的调用内容
  28. member的配置类上加注解@EnableFeignClients(basePackages="com.yxj.gulimall.member.feign"),
  29. 告诉spring这里面是一个远程调用客户端,member要调用的接口
  30. package com.yxj.gulimall.member;
  31. import org.mybatis.spring.annotation.MapperScan;
  32. import org.springframework.boot.SpringApplication;
  33. import org.springframework.boot.autoconfigure.SpringBootApplication;
  34. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  35. import org.springframework.cloud.openfeign.EnableFeignClients;
  36. @SpringBootApplication
  37. @MapperScan("com.yxj.gulimall.member.dao")
  38. @EnableDiscoveryClient
  39. @EnableFeignClients(basePackages="com.yxj.gulimall.member.feign")
  40. public class GulimallMemberApplication {
  41. public static void main(String[] args) {
  42. SpringApplication.run(GulimallMemberApplication.class, args);
  43. }
  44. }
  45. 4 那么要调用什么东西呢?就是我们刚才写的优惠券的功能,
  46. 复制函数部分,在membercom.yxj.gulimall.member.feign包下新建类:
  47. package com.yxj.gulimall.member.feign;
  48. import com.yxj.common.utils.R;
  49. import org.springframework.cloud.openfeign.FeignClient;
  50. import org.springframework.web.bind.annotation.RequestMapping;
  51. @FeignClient("gulimall-coupon") //告诉spring cloud这个接口是一个远程客户端,要调用coupon服务,再去调用coupon服务/coupon/coupon/member/list对应的方法
  52. public interface CouponFeignService {
  53. @RequestMapping("/coupon/coupon/member/list")
  54. public R membercoupons();//得到一个R对象
  55. }
  56. 5 然后我们在member的控制层写一个测试请求
  57. @RestController
  58. @RequestMapping("member/member")
  59. public class MemberController {
  60. @Autowired
  61. private MemberService memberService;
  62. @Autowired
  63. CouponFeignService couponFeignService;
  64. @RequestMapping("/coupons")
  65. public R test(){
  66. MemberEntity memberEntity = new MemberEntity();
  67. memberEntity.setNickname("张三");
  68. R membercoupons = couponFeignService.membercoupons(); //假设张三去数据库查了后返回了张三的优惠券信息
  69. // 打印会员和优惠券信息
  70. return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
  71. }
  72. 6 重新启动服务
  73. http://localhost:8000/member/member/coupons
  74. {"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}}
  75. 7 上面内容很重要,我们停留5分钟体会一下。
  76. coupon里的R.ok()是什么 # coupon里的控制层就是new了个couponEntity然后放到hashmap(R)里而已。
  77. public class R extends HashMap<String, Object> {
  78. public static R ok() {
  79. return new R();
  80. }
  81. public R put(String key, Object value) {
  82. super.put(key, value);
  83. return this;
  84. }
  85. }