Spring Cloud 微服务系列文章,点击上方合集↑
1. 简介
微服务架构中使用OpenFeign进行服务调用,OpenFeign提供了一种简洁的方式来定义和处理服务间的调用。
OpenFeign作为一个声明式的、模块化的HTTP客户端,通过接口的定义和注解的使用,简化了微服务之间的通信调用。
2. 启动Nacos
通过Nacos注册中心进行服务的注册与发现,先启动Nacos。
Linux/Unix/Mac 运行
sh startup.sh -m standalone
Windows 运行
startup.cmd -m standalone
3. 服务提供者 provider-service
创建provider-service
模块,用于提供服务。
3.1 pom.xml
- 添加
spring-boot-starter-web
依赖。 - 添加
spring-cloud-starter-alibaba-nacos-discovery
服务注册和发现相关依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.2 application.properties
nacos的用户名、密码和地址等相关配置。
# 应用名称
spring.application.name=provider-service
server.port=8001
# nacos
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=http://localhost:8848
# 数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3.3 ProviderController
一个简单的get请求接口,传入参数name
。
@RestController
@RequestMapping("provider")
public class ProviderController {
@GetMapping("test")
public String test(@RequestParam String name) {
System.out.println(name);
return "hello " + name;
}
}
4. 服务消费者 consumer-service
创建consumer-service
模块,用于消费服务。
consumer-service
服务调用provider-service
服务。
4.1 pom.xml
- 添加
spring-boot-starter-web
依赖。 - 添加
spring-cloud-starter-alibaba-nacos-discovery
服务注册和发现相关依赖。 - 添加
spring-cloud-starter-openfeign
服务调用相关依赖。 - 添加
spring-cloud-loadbalancer
负载均衡器相关依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
4.2 application.properties
nacos的用户名、密码和地址等相关配置。
# 应用名称
spring.application.name=consumer-service
server.port=8011
# nacos
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=http://localhost:8848
# 数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4.3 ProviderService
这里通过 OpenFeign 来调用服务。
创建ProviderService
接口,接口上的
@FeignClient(name = "provider-service")
来指向provider-service
服务,
其它类调用ProviderService#test
方法相当于直接调用provider-service
服务的 /provider/test
接口。
@FeignClient(name = "provider-service")
public interface ProviderService {
@GetMapping("/provider/test")
String test(@RequestParam String name);
}
4.4 ConsumerController
这里注入providerService
实例,调用test
方法
@RestController
@RequestMapping("consumer")
public class ConsumerController {
@Resource
private ProviderService providerService;
@GetMapping("test")
public String test(@RequestParam String name) {
System.out.println(name);
return providerService.test(name);
}
}
4.5 @EnableFeignClients()
在启动类上加上 EnableFeignClients()
注解。
@EnableFeignClients()
@SpringBootApplication
public class ConsumerServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerServiceApplication.class, args);
}
}
5. ProviderService 运行多个实例
先运行一个实例,然后修改端口号,再运行一个实例。
在nacos后台可以看到有两个provider-service
服务和一个consumer-service
服务。
6. 测试接口
访问地址: http://localhost:8011/consumer/test?name=zhangsan,浏览器显示hello zhangsan
,并且两个provider-service
服务轮流打印zhangsan
。
接口调用consumer-service
服务,consumer-service
服务会轮询调用provider-service
服务。
7. 总结
这里创建了provider-service
和consumer-service
两个模块,也就是服务提供者和服务消费者两个服务,每个服务都可以运行多个实例,实例运行后都会向nacos中心注册,服务消费者consumer-service
调用服务提供者provider-service
的服务。
整体架构图如下:
Spring Cloud 微服务系列 完整的代码在仓库的sourcecode/spring-cloud-demo
目录下。
gitee(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog
github:https://github.com/tigerleeli/xiaohuge-blog
关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!