10、SpringCloud 系列:Nacos - 注册中心

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

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 服务端,出现一下结果集群成功
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄天灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值