一、对一些概念的理解
1.服务注册发现:在分布式服务架构中,服务之间的信息调用,都是通过服务注册+服务发现的机制实现的;服务注册指的是 应用程序在启动的时候将自己的主机名、端口号、版本号等一些信息注册到服务中心;服务发现指的是服务中心通过服务发现的机制来找到哪些服务或者节点还在提供服务。
2.服务配置中心:在分布式服务架构中,为了提高系统的可靠性,通常将一些重要的服务配置为集群模式,即提供同一功能的微服务可能会部署在多台主机上;由于统一服务的配置都是一样,在后期软件维护、升级等过程中涉及多处配置文件的修改,所以微服务架构提供了服务配置中心,即将服务运行配置信息存储在服务配置中心,方便后期的服务维护升级等;
3.微服务路由: 所谓微服务路由指的时在客户端访问某个api 接口时,通过服务路由将不同的请求路径准确的转发到对应的服务提供模块上;
二、spring cloud 学习代码示例
学习项目中,通过nacos 做服务注册发行中心和服务配置中心,服务路由选用 spring gateway;服务间的调用 选用 openfeign;
1.项目创建
一路 next 到 完成;项目目录信息:
删除src 文件夹、修改pom 文件:
添加 <dependencyManagement> 节点 ;并新增spring cloud 相关依赖项:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
<spring.cloud.ali.version>2.2.3.RELEASE</spring.cloud.ali.version>
<spring.boot.version>2.3.6.RELEASE</spring.boot.version>
<fastDfs.version>1.27.2</fastDfs.version>
<mybatis.version>2.1.4</mybatis.version>
<pageHelper.version>5.2.0</pageHelper.version>
<druid.version>1.2.4</druid.version>
<mysql.version>8.0.22</mysql.version>
<hutool.version>5.5.2</hutool.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring cloud 微服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud alibaba 微服务-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.ali.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring boot 依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring boot 监控客户端-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-client</artifactId>
<version>2.1.2</version>
</dependency>
<!-- FastDFS 分布式文件系统-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastDfs.version}</version>
</dependency>
<!-- mybatis 依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- pagehelper 分页依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pageHelper.version}</version>
</dependency>
<!-- druid 依赖配置-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mysql 连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--通用工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
二、新增模块,根据系统服务功能、创建服务模块
Create from archetype 不用勾选;
最后的项目目录信息:
clou-module 模块下又新建了 clou-module-sys 模块; clou-module 模块主要负责提供系统业务信息处理服务;后期可以添加日志、定时任务、文件等服务模块
三、模块中包含模块的说明
1.新增模块
2. 模块 parent 需要指定模块名称,即如果clou-module-job 模块打算存放在clou-module模块下,需选在parent 为 clou-module;parent 模块下的src 文件夹可以删除。
四、服务配置中心
项目服务注册、发行和配置中心都是使用的nacos ;
下载nacos 并配置nacos 连接本地mysql 数据库;nacos 下载路劲: https://github.com/alibaba/nacos/releases/tag/2.0.0-ALPHA.2
解压 .zip 文件后;进入conf 目录,
ncaos-mysql.sql 脚本是nacos 数据库运行表脚本;application.properties 新增配置,连接mysql 数据库。
在文件最底部添加 配置信息;注意需要自己创建数据库名称,并运行 ncaos-mysql.sql 脚本
#############################################################################
nacos.istio.mcp.server.enabled=false
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.01:3306/修改为你的数据库名称?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=密码
启动nacos ;双击nacos/bin 目录下的 startup.cmd 启动。
启动成功界面:
nacos 服务端口为 8848 ;通过浏览器打开 http://192.168.1.6:8848/nacos/index.html 登录nacos ; 用户名和密码都是 nacos
出现 如上界面说明登录成功;
官方推荐,一个系统一个命名空间,这里改为一个项目一个命名空间
点击命名空间功能选项,新建命名空间 clou
clou 命名空间创建成功后:
备注:start 和 platform 为其他项目命名空间,不用理会
配置列表界面新增 clou 操作界面;
五、服务注册和发现
1. clou-gateway 模块的 pom 文件新增 <dependencies> 节点:
<dependencies>
<!-- spring cloud gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- spring ali cloud nacos 服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- spring cloud ali 配置重新 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- spring boot actuator 监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
2.clou-gateway 模块新增配置文件 bootstrap.yml
server:
port: 29080
spring:
application:
name: spri-clou-gateway
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: db59eae3-ddba-4c8e-9c71-1b709aff5efe
config:
server-addr: 127.0.0.1:8848
namespace: db59eae3-ddba-4c8e-9c71-1b709aff5efe
group: DEFAULT_GROUP
name: ${spring.application.name}
file-extension: yaml
shared-configs:
- data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
group: DEFAULT_GROUP
refresh: true # 是否自动刷新配置,默认为 false
说明:
- 1.spring.application.name 必须配;服务注册和发现都是通过模块名称 实现的。
- 2. namespace 为 在nacos 新增命名空间的时候 ,nacos 分配的
- 3. shared-configs 共享配置;项目中公共配置都放在这个配置文件里边,其他项目或者模块也是正常加载的;这里配置的共享配置文件名称为 application-dev.yaml
- 4. nacos 中的配置文件 名通过; spring.application.name-sspring.profiles.active.yaml 相对应;
3. nacos 添加配置文件
共享配置文件:
clou-gateway 项目配置文件:
说明:
1.文件名 spring.application.name-sspring.profiles.active.yaml 命名;
2. 文件格式 选择 YAML
4. clou-gateway 新增程序代码:
clou-gateway 项目文件目录:
项目启动文件: GatewayApplication
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class);
}
}
说明:@EnableDiscoveryClient 用于服务注册
项目Controller 文件: ConfigController
@RestController
public class ConfigController {
@Value("${system.name}")
private String systemName;
@Value("${config.version}")
private int configVersion;
@GetMapping("/config")
public String config() {
return "系统名称:" + systemName + "配置文件版本号:" + configVersion;
}
}
说明: systemName 用于测试 clou-gateway 项目配置文件 的访问 正确性; configVersion 用于测试 访问 共享配置的文件 application-dev.yaml 文件的配置正确性
启动项目后:
1. nacos 服务列表中 出现 spri-clou-gateway 服务;
2.访问 http://localhost:29080/config 返回配置文件信息:
至此,服务注册和服务配置 项目环境搭建完成;后续添加 网关路由 笔记