以Spring Cloud微服务项目为例,两个子项目:gulimall_coupon、gulimall_product
1、引入open-feign
<-使用spring阿里巴巴版本控制,所以没写版本号->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、在gulimall_coupon微服务的controller层,编写一个接口,告诉SpringCLoud这个接口需要调用远程服务,修改“com.atguigu.gulimall.coupon.controller.CouponController”,添加以下controller方法:
特别注意微服务的application.yml文件中配置微服务名的时候,注意命名不能使用"_",而是用使用"-",否则会报:
Service id not legal hostname (gulimall_coupon)错误
spring:
application:
name: gulimall-coupon #这里一定使用"-",不能使用下划线
@RequestMapping("coupon/coupon")
public class CouponController {
//全路径:/coupon/coupon/feign
@RequestMapping("feign")
public R feign(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("买一百送一百");
return R.ok().put("coupon",couponEntity);
}
}
2.1、在gulimall_product目录下 ,新建一feign包(与server同级别),在feign下新建“com.atguigu.gulimall.product.feign.CouponFeignService”接口
@FeignClient("{被调用的微服务名}")
@RequestMapping("/coupon/coupon/member/list")
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
//被调用微服务的全路径
@RequestMapping("/coupon/coupon/feign")
public R feign();
}
2.2、在gulimall_product微服务启动类下,修改“com.atguigu.gulimall.member.GulimallProductApplication”类,添加上"@EnableFeignClients(basePackages = “{feign包路径}”)
@SpringBootApplication
@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
声明接口的每一个方法都是调用哪个远程服务的那个请求
3、开启远程调用功能
在gulimall_product微服务的controller层注入feign接口在调用,
com.atguigu.gulimall.product.controller.ProductController
@RequestMapping("/feign")
public R test(){
SpuInfoEntity spuInfoEntity = new SpuInfoEntity();
spuInfoEntity.setUpdateTime(new Date());
R feign = couponFeignService.feign();
return R.ok().put("Update",spuInfoEntity).put("feign",feign);
}
4、访问http://localhost:8000/product/attrattrgrouprelation/feign