openFeifn服务调用
基于HTTP的,生命是的远程服务调用
- 远程调用的步骤
- 引入open-feign
- 创建一个名为feign的接口以后所有的远程调用的接口都放在这个包下
- 编写接口,告诉SpringCloud这个接口需要远程服务,@FeignClient
- 在主方法上开启远程调用功能@EnableFeignClients
- 代码案例
(1)用户服务主方法
/**
* 当前服务为会员服务
* 1、想要远程调用别的服务
* 1)、引入open-feign
* 2)、编写一个接口,告诉SpringCloud这个接口需要调用远程服务
* 1、声明接口的每一个方法都是调用哪个远程服务的那个请求
* 3)、开启远程调用功能
*/
@SpringBootApplication
//开启nacos的服务注册与发现功能
@EnableDiscoveryClient
// 服务启动之后就会扫面feign包下所有加了@FeignClient注解的接口
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
public class GuilimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GuilimallMemberApplication.class, args);
}
}
(2)在用户服务创建远程调用会员服务的接口
package com.atguigu.gulimall.member.feign;
import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 这是一个声明式的远程调用:调用哪个服务些哪个服务名,服务名就是application.yml中的application:name: guilimall-coupon
*/
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
// 复制要调用方法的完整前名
@RequestMapping("/coupon/coupon/member/list")
public R membercoupons();
}
(3)在用户服务的Controller,声明写好的调用远程服务的接口,并使用
@RestController
@RequestMapping("member/member")
public class MemberController {
@Autowired
private MemberService memberService;
// 声明要调用远程服务的接口
@Autowired
private CouponFeignService couponFeignService;
/**
* 测试远程调用
* @return
*/
@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"));
}
}
(4)在浏览器访问http://localhost:8000/coupon/coupon/member/list 成功