微服务项目的某一模块想要调用另一模块,可以使用OpenFeign
进行远程调用前,调用者与被调用者都需要注册到注册中心,注册服务到注册中心,可以参考我的这篇文章SpringCloud Alibaba-Nacos作为注册中心
使用示例:
以下示例是member模块(9091)远程调用coupon模块(9090)
(1)member(调用者)模块引入依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
(2)coupon(被调用者)写一个测试接口,来给member测试调用
@RestController
public class CouponController {
@RequestMapping("/coupon")
public int test() {
return 999888777;
}
}
(3)member创建feign包,创建接口,告诉SpringCloud这个接口需要调用远程服务
@FeignClient("xxx")
package com.xsl.member.feign;
import xxx;
@FeignClient("coupon") // 告诉SpringCloud这个接口需要调用远程coupon服务
public interface CouponFeignService {
@RequestMapping("/coupon") // 路径注意写全
public int test(); // 此处为上述接口(被调用者)去掉方法体,即方法的完整签名
}
(4)member启动类上添加注解开启远程调用功能
这个注解的参数可以不写,将扫描启动类所在的包以及子包中的接口
@EnableFeignClients(basePackages = "com.xsl.member.feign")
(5)member的Controller里就可以写方法来实现调用coupon了
@RestController
public class MemberController {
@Autowired
CouponFeignService service;
@RequestMapping("feign")
public int Feign() {
int test = service.test();
return test;
}
}
(6)访问localhost:9091/feign
效果同于访问localhost:9090/coupon