tops
前言
这其实没啥好写的,不过最新版本有些坑,再加上国内的文档真的是一言难尽,就记录一下吧。
nacos 官方文档:https://nacos.io/zh-cn/docs/quick-start.html
spring cloud 官方文档:https://spring.io/projects/spring-cloud
该demo同时整合了 spring cloud sleuth 分布式链路追踪,文内不再细讲
Nacos
nacos 是集服务发现和配置中心一体的组件,自带后台并集成用户权限,支持动态配置。
nacos 安装比较简单,下载后直接解压就有windows和linux的脚本可用,在这之前请确保安装好 maven 和 java 。
nacos并不支持较新的 java 版本,建议使用 java 8 或者 11 。
下载好后直接解压,windows下使用cmd脚本启动,mac或者linux使用sh脚本启动,便于测试,可直接使用单机模式启动:
./startup.sh -m standalone
集群方式参考官方文档即可。
启动后可访问 http://127.0.0.1:8848/nacos 浏览控制台。
分布式服务
这里创建 2 个服务: api(消费者) 和 content (生产者),Idea 中使用 spring initializr 创建即可。
创建后添加相关的依赖,相关版本如下:
<properties>
<java.version>8</java.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
注意: 当前最新版本的 nacos client 已不再支持 spring-cloud-starter-netflix-ribbon ,这是官方文档没提到过的,相反,文档上是写着支持 robbin 的,所以调试了很久,直到后面找个了相关的 issue ,所以我们直接使用 openfeign 。
Servive Content(生产者)
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>nacosServiceContent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacosServiceContent</name>
<description>nacosServiceContent</description>
<properties>
<java.version>8</java.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
<nacos-client.version>1.4.1</nacos-client.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>
</depen