您的位置:首页 > 编程语言 > Java开发

SpringCloudAlibaba - 整合 Nacos 实现服务注册与发现

2021-09-21 20:25 811 查看

目录
  • Nacos是什么?
  • 服务发现原理
  • 搭建 Nacos Server
  • Nacos Client 56c 注册

    前言

    记录下

    Nacos
    的整合过程

    环境

    Win 10 + Spring Cloud 2020.0.1 + Spring Cloud Alibaba 2021.1 +  Nacos 2.0.0


    Nacos是什么?

    • Nacos
      是一个服务发现组件,也是一个配置服务器,
      Nacos
      解决的两个问题:
    1、服务A怎么找到服务B
    2、管理微服务的配置


    服务发现原理

    • 服务发现机制
      服务发现机制就是服务消费者总能找到服务提供者的机制,举个例子:服务发现就像手机中 ad8 的名片夹,记录一个人所有的联系方式,通过该名片可以联系到某个人,而当某个联系方式不存在时(服务DOWN)就将其从名片夹中删除。

    • 用于生产的服务发现机制:
      1、在微服务上做缓存,定时任务发送当前的地址,调用时取缓存中微服务的地址,该做法好处首先是压力小,不用每次都去实时取,其次是即使服务发现组件崩溃也可以取到缓存中的值,只是无法更新缓存中的值。
      2、每个微服务实例都向服务发现组件发送心跳(即一次请求),告诉服务发现组件自己是活着的,如果服务发现组件发现某一个实例长时间未向自己发送心跳,即认为该实例已挂,将其健康状态标记为

      DOWN
      ,服务消费者即不再调用该实例。


    搭建 Nacos Server

    Nacos Server 下载地址

    https://github.com/alibaba/nacos/releases


    Nacos Server 的版本选择

    Nacos Server
    的版本选择参照标准在
    spring-cloud-alibaba-dependencies-xxx.pom
    中有记录,如我的
    Spring Cloud Alibaba
    的版本是
    2021.1
    ,其推荐的版本是
    1.4.1
    (生产环境优先选择)

    由于我这里是开发环境,我选择的版本是
    2.0.0


    运行 Nacos Server

    startup.cmd -m standalone

    • 访问
      http://localhost:8848/nacos/#/login
      (默认端口是8848)

    • 默认登录账号/密码:
      nacos/nacos

    ... Nacos Server 搭建完毕

    Nacos Client 注册

    user-center 用户 564 中心微服务注册

    • pom.xml
    <?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.coisini</groupId>
    <artifactId>user-center</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>user-center</name>
    <description>user-center project for Spring Boot</description>
    <properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>2020.0.1</spring-cloud.version>
    <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-
    ad8
    boot-starter-web</artifactId>
    </dependency>
    <!--spring-cloud-starter-{spring cloud子项目的名称}-[{模块名称}]-->
    <!-- nacos -->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    </dependencies>
    
    <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-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>
    </project>
    • application.yml
    spring:
    application:
    # 服务名称
    name: user-center
    cloud:
    nacos:
    discovery:
    # 指定nacos server的地址
    server-addr: localhost:8848
    • 启动项目
    • 访问
      Nacos

    content-center 内容中心微服务注册

    • pom.xml
      依赖同上
    • application.yml
    spring:
    application:
    # 服务名称
    name: content-center
    cloud:
    nacos:
    discovery:
    # 指定nacos server的地址
    server-addr: localhost:8848
    • 访问
      Nacos


    ad8

    服务发现测试

    • 内容中心编写测试代码
    @RestController
    public class TestController {
    
    @Autowired
    private DiscoveryClient discoveryClient;
    
    /**
    * 测试:服务发现,证明内容中心总能找到用户中心
    * @return 用户中心所有实例的地址信息
    */
    @GetMapping("test")
    public List<ServiceInstance> getInstances() {
    // 查询指定服务的所有实例的信息
    return discoveryClient.getInstances("user-center");
    }
    }
    • 如下所示,内容中心可以获取到用户中心所有实例的地址信息


    - End -
    白嫖有风险
    点赞加收藏
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: