目录
前言
官方中文文档
使用版本
spring
中间件
使用到的组件与功能
环境安装
虚拟机
nexus
nacos
集成过程
工程搭建
父工程搭建
子工程
服务集成
nacos
配置文件:
服务注册与发现-discovery
服务注册
启动
服务发现
测试
配置管理-config
新增配置
测试
前言
只介绍如何集成及使用,概念性的东西就不细说了。慢慢更新
官方中文文档
spring-cloud-alibaba/README-zh.md at 2022.x · alibaba/spring-cloud-alibaba · GitHub
使用版本
spring
我这边使用的都是最新版
spring.cloud.alibaba.version | 2022.0.0.0-RC2 |
spring.cloud.version | 2022.0.0 |
spring.boot.version | 3.0.2 |
spring-cloud-alibaba、spring-cloud、springboot 三者的版本关系说明
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
中间件
nacos: 2.2.1
使用到的组件与功能
服务注册与发现:Nacos
分布式事务:Seata
网关:Spring Cloud Gateway
服务调用:OpenFeign
环境安装
虚拟机
我是用的VMware虚拟机里面跑的。
具体怎么装,看下面
(312条消息) VMware16安装 CentOS7_ricardo.M.Yu的博客-CSDN博客
nexus
我这边搭建了一个nexus maven私服
(310条消息) docker-compose 搭建maven私服 nexus与配置_ricardo.M.Yu的博客-CSDN博客
nacos
(310条消息) docker-compose安装nacos 2.2.1及配置_ricardo.M.Yu的博客-CSDN博客
集成过程
工程搭建
我这边使用的是springboot多模块项目,最终效果如下
父工程搭建
POM文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>cloud-alibaba</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>common</module><module>file</module><module>auth</module><module>gateway</module><module>admin</module><module>data</module><module>biz</module><module>log</module><module>consumer</module></modules><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version><spring.cloud.version>2022.0.0</spring.cloud.version><spring.boot.version>3.0.2</spring.boot.version><spring.boot.admin.version>2.5.1</spring.boot.admin.version><lombok.version>1.18.20</lombok.version><fastjson.version>1.2.73</fastjson.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.2</version><relativePath/></parent><dependencyManagement><!-- cloud --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.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><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><!-- admin --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>${spring.boot.admin.version}</version></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>${spring.boot.admin.version}</version></dependency><!-- 第三方工具 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency></dependencies></dependencyManagement><!--统一环境--><profiles><profile><id>prod</id><properties><profiles.active>prod</profiles.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>dev</id><properties><profiles.active>dev</profiles.active></properties></profile></profiles><!--maven插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>none</mainClass> <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 --><classifier>execute</classifier> <!-- 为了解决依赖模块找不到此模块中的类或属性 --></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
子工程
服务集成
nacos集成
部分可以参考官方的示例
Nacos Spring Cloud 快速开始
配置文件
这边我定义了4组配置文件,说一下他们的作用:
引导类配置;
bootstrap.yaml:定义当前生效的配置
spring:profiles:active: dev
bootstrap-dev.yaml:定义引导类当前生效的参数
spring:cloud:nacos:server-addr: http://192.168.1.115:8108/discovery:group: dev
应用级配置:
application.yaml
应用级别的基础配置
logging:level:root: infocom:sy: debug
application-dev.yaml
定义应用的名称以及端口等信息
server:port: 9110
spring:application:name: biz
服务注册与发现-discovery
服务注册
引入依赖
<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-loadbalancer</artifactId>
</dependency>
启动
启动后,查看nacos控制台服务列表,已经能看到这个实例
服务发现
需要在新建一个consumer服务,来测试
分别在两个模块建两个controller, biz模块下:
@RestController
@RefreshScope
@RequestMapping("/")
public class BizController {@GetMapping(value = "/echo/{string}")public String echo(@PathVariable String string) {return "Hello Nacos Discovery " + string;}
}
consumer模块下
@Slf4j
@RestController
@RequestMapping("/")
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@Value("${spring.application.name}")private String appName;@GetMapping("/echo/app-name")public String echoAppName() {//使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问ServiceInstance serviceInstance = loadBalancerClient.choose("biz");String url = String.format("http://%s:%s/echo/%s", serviceInstance.getHost(), serviceInstance.getPort(), appName);System.out.println("request url:" + url);String result = restTemplate.getForObject(url, String.class);log.info("result -> {}", result);return result;}
}
测试
用consumer下的http测试接口,发现已经能正常返回数据,appName即为consumer
配置管理-config
配置管理测试,主要集成从nacos拉取公共配置并测试,
新增配置
biz模块下新增依赖和配置文件
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
增加配置中心config配置,文件扩展为yaml
spring:cloud:nacos:server-addr: http://192.168.1.115:8108/discovery:group: dev#配置中心config:server-addr: http://192.168.1.115:8108/group: devfile-extension: yaml# 共享配置
# shared-configs:
# - data-id: application-dev.yaml
# group: dev
# extension-configs:
# - dataId: test01.yml
# group: devapplication:name: biz
nacos web页面配置列表新增一个配置,命名格式和group要对,dataId格式
${spring.application.name}-${profile}.${file-extension:properties}
示例: biz-dev.yaml
我这边建了个示例
测试
修改 BizController 增加方法:
@Value("${username}")private String username;@GetMapping("/get")public String get() {return username;}
http测试:可以看到username的值已经为 nacos的设置值