Springboot-cli 开发脚手架系列
文章目录
- Springboot-cli 开发脚手架系列
- 简介
- `Nacos 的特性`
- `Nacos 服务注册中心`
- 1. 环境准备
- 2. 创建Springcloud项目
- 3. 服务提供者
- 4. 服务消费者
- 6. 源码分享
简介
Nacos 提供了一系列简单易用的特性,能够帮助我们快速地实现动态服务发现、服务配置等功能。
Nacos 的特性
- 服务发现
- 服务健康监测
- 动态配置服务
- 动态 DNS 服务
- 服务及其元数据管理
Nacos 服务注册中心
- Nacos 作为服务注册中心可以实现服务的注册与发现
共涉及到以下 3 个角色:
- 服务注册中心(Register Service):它是一个 Nacos Server,可以为服务提供者和服务消费者提供服务注册和发现功能。
- 服务提供者(Provider Service):它是一个 Nacos Client,用于对外服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现和调用。
- 服务消费者(Consumer Service):它是一个 Nacos Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。
接下来我们进入实战演示
1. 环境准备
- 安装nacos
- docker安装参考
- 其它环境略
- 打开nacos管理页面
http://ip:8848/nacos/
- 新增一个
test
命名空间 - 保存这个命名空间id
2. 创建Springcloud项目
创建过程略,结尾有源码
- springCloud与nacos版本对照信息参考
https://start.spring.io/actuator/info
- pom添加依赖,此处采用
2021.1
版本的nacos
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring-cloud.version>2020.0.5</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
<spring-boot-dependencies.version>2.5.3</spring-boot-dependencies.version>
</properties>
<dependencies>
<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>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- spring Cloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--支持Spring Boot 2.5.x-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
3. 服务提供者
- 配置文件更名为
bootstrap.yml
server:
port: 9998
# NaCos
spring:
application:
name: provider
# NaCos
cloud:
service-registry:
auto-registration:
# 是否注册到注册中心
enabled: true
nacos:
discovery:
server-addr: 192.168.41.128:8848
namespace: 1d5a097c-898e-403e-8935-fdbe2cf854f6
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: ${spring.cloud.nacos.discovery.namespace}
file-extension: yaml
prefix: ${spring.application.name}
- 此处的
namespace
即为我们开头创建的命名空间的ID,根据自己实际情况改为你实际的id - 创建API接口
IndexController.java
@RestController
@Slf4j
public class IndexController {
@GetMapping("get")
public String get() {
return "喵喵喵";
}
}
- 启动类上添加
@EnableFeignClients
注解
从Edgware版本开始,可以不加
@EnableDiscoveryClient
注解,只要配置好注册中心的相关配置即可自动开启服务注册功能。
@SpringBootApplication
public class ProviderServer {
public static void main(String[] args) {
SpringApplication.run(ProviderServer.class, args);
}
}
- 启动项目
- 打开nacos管理界面,可以看到我们的提供者已经成功注册到nacos服务中心了
4. 服务消费者
bootstrap.yml
server:
port: 9999
# NaCos
spring:
application:
name: consumer
# NaCos
cloud:
service-registry:
auto-registration:
# 是否注册到注册中心
enabled: true
nacos:
discovery:
server-addr: 192.168.41.128:8848
namespace: 1d5a097c-898e-403e-8935-fdbe2cf854f6
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: ${spring.cloud.nacos.discovery.namespace}
file-extension: yaml
prefix: ${spring.application.name}
- 创建服务调用接口
ProviderApi.java
,用于调用提供者的api。
@FeignClient(value = "provider")
public interface ProviderApi {
/**
* @return ``
*/
@GetMapping("/get")
ResponseEntity<String> get();
}
@FeignClient(value = "provider")
中value的值即为需要调用服务的名称,我们上一步创建的提供者名称为provider,所以这里value 的值设为 “provider”
- 创建测试api
ConsumerController.java
@RestController
@Slf4j
@RequiredArgsConstructor
public class ConsumerController {
private final ProviderApi providerApi;
@GetMapping("/test")
public String get() {
// 从提供者中获取数据
ResponseEntity<String> stringResponseEntity = providerApi.get();
log.info("从提供者中获取数据:{}", stringResponseEntity);
return stringResponseEntity.getBody();
}
}
- 启动消费者
- 浏览器输入
http://localhost:9999/test
- 可以看到我们通过消费者访问了提供者的接口,完成了服务间的调用。
本项目已收录
- Springboot-cli开发脚手架,集合各种常用框架使用案例,完善的文档,致力于让开发者快速搭建基础环境并让应用跑起来。