想要远程调用别的服务(必须在注册中心开启才能使用远程调用,否则会调用失败)
1、先在想要调用别的服务的模块内引入open-feign依赖
<!-- OpenFeign远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、再编写一个接口,告诉SpringCloud这个接口需要远程服务
然后在接口的上方添加注解@FeignClient("被调用的服务名称"),
如@FeignClient("gulimall-coupon")这个被调用服务的名称是注册中心的名称
如图:
比如我们在优惠券模块(coupon)内写了一个方法,然后我们的会员模块(member)需要调用优惠券模块,我们此时就需要使用到远程调用
我们在优惠券模块内写了一个方法如:
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@RequestMapping("/member/list")
public R membercounpons(){
CouponEntity couponEntity=new CouponEntity();
couponEntity.setCouponName("满100减30");
return R.ok().put("coupons",Arrays.asList());
}
}
然后我们的会员模块(member)需要远程调用这个方法随后我们需要在刚刚定义的那个接口中编写如下代码
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R membercounpons();
}
代码中所写了需要调用的方法名称以及该方法的全路径,
随后开启远程调用功能
添加注解@EnableFeignClients 该注解中有一个属性basePackages,指的是我们远程调用接口的路径
/**
* 1.想要远程调用别的服务
* 2.引入open-feign依赖
* 3.编写一个接口添加注解@FeignClient("gulimall-coupon"),告诉Spring-cloud这个接口需要调用远程服务
* 4.声明接口的每一个方法都是调用哪个远程服务的哪个请求
* 5.开启远程调用功能添加注解
*/
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
如图:
将上诉所写举个例子,在会员里面创建一个方法去远程调用优惠券
/**
* 会员
*
* @author chenzhibo
* @email chenzhibo@gmail.com
* @date 2024-01-23 16:53:19
*/
@RestController
@RequestMapping("member/member")
public class MemberController {
@Autowired
CouponFeignService couponFeignService;
@RequestMapping("coupons")
public R test(){
MemberEntity memberEntity=new MemberEntity();
memberEntity.setNickname("张三");
R membercoupons=couponFeignService.membercounpons();
return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
}
运行结果如下,这就是远程调用的简单使用方式了