SpringCloud 系列列表:
文章名 | 文章地址 |
---|---|
01、Eureka - 集群、服务发现 | https://blog.csdn.net/qq_46023503/article/details/128319023 |
02、Ribbon - 负载均衡 | https://blog.csdn.net/qq_46023503/article/details/128332288 |
03、OpenFeign - 远程调用 | https://blog.csdn.net/qq_46023503/article/details/128387961 |
04、Hystrix - 断路器 | https://blog.csdn.net/qq_46023503/article/details/128408601 |
05、Sleuth - 链路追踪 | https://blog.csdn.net/qq_46023503/article/details/128409339 |
06、Gateway - 网关 | https://blog.csdn.net/qq_46023503/article/details/128430842 |
07、Alibaba - 介绍 | https://blog.csdn.net/qq_46023503/article/details/128434080 |
08、Nacos - 安装、启动 | https://blog.csdn.net/qq_46023503/article/details/128460411 |
09、Nacos - 配置文件中心 | https://blog.csdn.net/qq_46023503/article/details/128460649 |
10、Nacos - 注册中心 | https://blog.csdn.net/qq_46023503/article/details/128460494 |
Nacos - 注册中心
1 入门案例
1.1 创建 SpringBoot 项目
将 https://start.spring.io 改为 https://start.aliyun.com
1.2 修改 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>
<!--修改 springboot 的版本号-->
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.nacos</groupId>
<artifactId>nacosclienta</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacosclienta</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
<!--修改 springcloud 的版本号-->
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<!--添加 alibaba 的版本号-->
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加 nacos 的 jar 包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 添加 alibaba 的依赖管理 -->
<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>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>netflix-candidates</id>
<name>Netflix Candidates</name>
<url>https://artifactory-oss.prod.netflix.net/artifactory/maven-oss-candidates</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
1.3 修改 yml 文件
server:
port: 8080
spring:
application:
name: nacosclenta
cloud:
nacos:
server-addr: localhost:8848 # 向 nacos 服务端注册
username: nacos # 账号
password: nacos # 密码
discovery:
service: user-service # 指定名称,不写,默认为服务名称
namespace: d7e9db40-b7ff-4360-b48b-162e985a8a3b # 指定命名空间,值为命名空间的 id 值,如果不指定命名空间,默认会注册到 public 中
group: A-GROUP # 指定分组,没有会自定创建,如果不指定分组,默认是 DEFAULT_GROUP
1.4 给启动类添加注解(此版本不加也行)
@SpringBootApplication
@EnableDiscoveryClient // 开启 nacos 的服务发现
public class NacosclientaApplication {
public static void main(String[] args) {
SpringApplication.run(NacosclientaApplication.class, args);
}
}
1.5 启动 nacos 服务端,然后启动项目
访问:http://localhost:8848/nacos
2 服务发现
2.1 前置条件
配置两个服务,一个为 one-service,另一个为 two-service
2.2 将两个服务配置到不同的命名空间中
使用 one-service 找寻 two-service
//one-service 的控制层
@RestController
public class TestController {
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/test")
public String test(){
List<ServiceInstance> iservice = discoveryClient.getInstances("two-service");
return "ok";
}
}
结果:访问 test ,发现结果为空,即访问不到
2.3 将两个服务配置到相同命名空间不同组中
结果:访问不到
2.4 将两个服务配置到相同命名空间相同组中
结果:可以访问到
3 在 Nacos 中使用 OpenFeign
3.1 前置条件
配置两个 nacos 服务,一个为 one-service:8080,另一个为 two-service:8081,两个服务在同一个命名空间同一个组中
3.2 在 two-service 中添加控制层测试方法
@RestController
public class BController {
@GetMapping("info")
public String info(){
return "测试 feign 的远程调用";
}
}
3.3 修改 one-service 的 pom 文件
添加 OpenFeign 的依赖和 springcloud 的管理依赖
<!--添加 openFeign 的依赖管理-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--在 <dependencyManagement> 标签中添加 springcloud 的管理依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
3.4 在 one-service 中创建远程调用接口
@FeignClient("two-service") //注意名字为配置的名字
public interface IOpenFeign {
@GetMapping("info")
public String info();
}
3.5 在 one-service 中创建控制层测试方法
@RestController
public class TestController {
@Autowired
private IOpenFeign iOpenFeign;
@GetMapping("/test")
public String test(){
return iOpenFeign.info();
}
}
3.6 访问测试
访问 http://localhost:8080/test,浏览器会输出 “测试 feign 的远程调用”
4 在 Nacos 中使用 Gateway
4.1 前置条件
配置两个 nacos 服务,一个为 one-service:8080,另一个为 two-service:8081,两个服务在同一个命名空间同一个组中
4.2 创建 getway 项目
- 选择 gateway 和 nacos-discovery 依赖
- 在启动类上添加 @EnableDiscoveryClient
- yml 文件
server:
port: 80
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
discovery: # 需要和其他两个服务在同一个命名空间和组下
namespace: d7e9db40-b7ff-4360-b48b-162e985a8a3b
group: A-GROUP
gateway:
discovery:
locator:
enabled: true # 开启动态路由
lower-case-service-id: true # 开启小写
4.3 访问测试
访问 http://localhost:8080/test 和 http://localhost/one-service/test 的效果一致
5 Nacos Discovery Starter 更多的配置项
6 集群
6.1 准备三个 Nacos 服务端
6.2 修改每个服务端的 application.properties
位置:nacos\conf\application.properties
# 1、修改第21行的端口,分别设置为 8848、8850、8852
server.port=8848
#-------------------------
# 2、将30+行的数据库连接打开
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
6.3 修改每个服务器端的 cluster.conf.example
位置:nacos\conf\cluster.conf.example
将 cluster.conf.example 名字改为 cluster.conf
# 将每个服务器都以 ip地址:端口 的形式配置
169.254.58.106:8848
169.254.58.106:8850
169.254.58.106:8852
6.4 启动测试
同时开始三个 nacos 服务端,出现一下结果集群成功