Alibaba Cloud微服务架构之服务间调用OpenFeign

2022-06-02 00:00:00 调用 服务 接口 注解 依赖

简介
Feign已经停止维护,OpenFeign是Spring Cloud 在Feign的基础上进行了加强,可以看成是一个大的升级版本。新的OpenFeign支持了Spring MVC的注解,主要是controller层常用的注解,如@RequesMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

1、依赖配置
项目采用Maven多模块开发,主要依赖在父类pom配置,子模块声明依赖引用

父模块pom

<dependencyManagement>
<dependencies>
<!-- alibaba-cloud依赖 对应Spring Cloud Hoxton-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${com.alibaba.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud依赖 Hoxton-->
<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>


子模块pom.xml

<!--Nacos服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- openFeign依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、application.yml配置
openfeign用feign升级而来,配置参数没有太多改变

spring:
application:
##服务注册名称
name: api-xxx
##nacos配置
cloud:
nacos:
discovery:
###nacos注册地址
server-addr: 127.0.0.1:8848 #注册中心地址
## 服务调用OpenFeign
feign:
client:
config:
default:
#连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
ConnectTimeOut: 5000
#指建立连接后从服务端读取到可用资源所用的时间
ReadTimeOut: 10000

3、开启服务的openFeign客户端
新增feign客户端开启注解@EnableFeignClients

@SpringBootApplication
@EnableFeignClients//开启feign客户端调用
@EnableDiscoveryClient//服务发现
public class CloudCustomerApplication {

public static void main(String[] args) {
SpringApplication.run(CloudCustomerApplication.class, args);
}

}

4、服务调用接口编写
每个微服务调用,对应一个服务接口,服务名就是Nacos注册名称,即spring.application.name = ‘cloud-service’

@FeignClient("cloud-service")
public interface CloudService {

@GetMapping("/cloud/data")//提供服务方的接口调用路径,和controller里面传参一样
String getData(@RequestParam("shopId")Integer shopId);

@GetMapping("/cloud/info")
String getInfo();
}

5、服务调用方式
直接采用自动注解@Autowire的方式,使用方法和@servic服务接口一样,在需要的地方直接注入接口调用。

@Autowired
CloudService cloudService;

@GetMapping("/cloud/test")
public String getData(){
log.info(">>>>> 系统时间=[{}]测试调用服务",LocalDateTime.now());
return cloudService.getData(1);
}
————————————————
版权声明:本文为CSDN博主「黑色的四叶草」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Niezhuxue/article/details/118933900

相关文章