当前位置 博文首页 > RtxTitanV的博客:SpringCloudAlibaba 服务注册发现与注册中心Na

    RtxTitanV的博客:SpringCloudAlibaba 服务注册发现与注册中心Na

    作者:[db:作者] 时间:2021-06-20 12:23

    本文主要对SpringCloudAlibaba组件Nacos实现服务注册发现和作为配置中心使用进行简单总结,其中SpringBoot使用的2.4.5版本,SpringCloud使用的2020.0.2版本,SpringCloudAlibaba使用的2021.1版本。

    一、SpringCloudAlibaba与Nacos简介

    1.SpringCloudAlibaba简介

    Spring Cloud Alibaba为分布式应用开发提供了一个一站式解决方案。它包含了开发分布式应用服务的必需组件,使开发者能轻松使用Spring Cloud进行分布式应用服务开发。通过Spring Cloud Alibaba,只需添加一些注解和少量配置,就可以将Spring Cloud应用接入阿里分布式应用解决方案,并通过阿里中间件来迅速搭建分布式应用系统。

    Spring Cloud Alibaba常用组件:

    • Sentinel:服务限流与降级熔断。
    • Nacos:服务注册发现与配置中心。
    • RocketMQ:分布式消息系统。
    • Seata:分布式事务解决方案。
    • Dubbo:高性能RPC框架。
    • Alibaba Cloud OSS:阿里云对象存储服务。
    • Alibaba Cloud SchedulerX:分布式任务调度。
    • Alibaba Cloud SMS:覆盖全球的短信服务。

    2.Nacos简介

    Nacos致力于发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,用于快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos使地构建、交付和管理微服务平台变得更容易。 Nacos是构建以“服务”为中心的现代应用架构的服务基础设施。

    Nacos关键特性:

    • 服务发现和服务健康监测:Nacos支持基于DNS和基于RPC的服务发现。Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务。Nacos提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
    • 动态配置服务:动态配置服务可以以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置,配置变更时无需重新部署应用和服务。配置中心化管理能更加简单地实现无状态服务,使服务按需弹性扩展变得更容易。
    • 动态DNS服务:动态DNS服务支持权重路由,更容易实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能更容易地实现以DNS协议为基础的服务发现。
    • 服务及其元数据管理:Nacos能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的SLA以及最首要的metrics统计数据。

    二、安装并运行Nacos

    1.预备环境准备

    Nacos依赖Java环境来运行。如果是从代码开始构建并运行Nacos,还需要为此配置Maven环境,请确保是在以下版本环境中安装使用:

    1. 64 bit OS,支持Linux/Unix/Mac/Windows,推荐选用Linux/Unix/Mac。
    2. 64 bit JDK 1.8+;下载&配置。
    3. Maven 3.2.x+;下载&配置。

    2.下载源码或安装包

    从Github上下载源码方式:

    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
    ls -al distribution/target/
    
    // change the $version to your actual path
    cd distribution/target/nacos-server-$version/nacos/bin
    

    从最新稳定版本下载编译后压缩包nacos-server-$version.zip的方式:

    unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
    cd nacos/bin
    

    3.启动服务器

    Linux/Unix/Mac启动命令(standalone代表着单机模式运行,非集群模式):

    sh startup.sh -m standalone
    

    如果使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

    bash startup.sh -m standalone
    

    Windows启动命令(standalone代表着单机模式运行,非集群模式):

    startup.cmd -m standalone
    

    Nacos下载的2.0.1版本,在Windows运行成功后,可以访问http://localhost:8848/nacos查看Nacos的管理页面,默认账号密码都是nacos:
    1

    4.关闭服务器

    Linux/Unix/Mac关闭命令:

    sh shutdown.sh
    

    Windows关闭命令:

    shutdown.cmd
    

    或者双击shutdown.cmd运行文件。

    三、Nacos实现服务注册与发现

    通过maven新建一个名为spring-cloud-alibaba-nacos-discovery-provider的项目作为服务提供者(服务生产者),一个名为spring-cloud-alibaba-nacos-discovery-consumer的项目作为服务消费者。

    1.服务提供者

    编写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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.rtxtitanv</groupId>
        <artifactId>spring-cloud-alibaba-nacos-discovery-provider</artifactId>
        <version>1.0.0</version>
        <packaging>jar</packaging>
    
        <name>spring-cloud-alibaba-nacos-discovery-provider</name>
        <description>nacos discovery provider</description>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-boot.version>2.4.5</spring-boot.version>
            <spring-cloud.version>2020.0.2</spring-cloud.version>
            <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <!-- SpringBoot 依赖 -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- SpringCloud 依赖 -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- SpringCloudAlibaba 依赖 -->
                <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>
    
        <dependencies>
            <!-- Spring Cloud Alibaba Nacos Discovery 服务发现起步依赖 -->
            <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-web</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    

    Nacos Discovery Starter可以将服务自动注册到Nacos服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter也将服务实例自身的一些元数据信息-例如host,port,健康检查URL,主页等-注册到Nacos。

    主启动类:

    package com.rtxtitanv;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    /**
     * @author rtxtitanv
     * @version 1.0.0
     * @name com.rtxtitanv.NacosDiscoveryProviderApplication
     * @description 主启动类
     * @date 2021/4/30 17:57
     */
    @SpringBootApplication
    @EnableDiscoveryClient
    public class NacosDiscoveryProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(NacosDiscoveryProviderApplication.class, args);
        }
    }
    

    @EnableDiscoveryClient:开启SpringCloud服务注册于发现

    编写配置文件,在application.yml中进行如下配置:

    server:
      port: ${PORT:8090}
    
    spring:
      application:
        name: nacos-discovery-provider
      cloud:
        nacos:
          discovery:
            # nacos服务器地址
            server-addr: 127.0.0.1:8848
    

    如果不想使用Nacos实现服务注册与发现,可以将spring.cloud.nacos.discovery.enabled设置为false

    创建测试用的Controller:

    package com.rtxtitanv.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author rtxtitanv
     * @version 1.0.0
     * @name com.rtxtitanv.controller.ProviderController
     * @description ProviderController
     * @date 2021/4/30 18:01
     */
    @RestController
    public class ProviderController {
    
        @Value("${server.port}")
        private String port;
        @Value("${spring.cloud.client.ip-address}")
        private String ip;
    
        @GetMapping("/home")
        public String home
    
    下一篇:没有了