zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现

    摘自:https://www.cnblogs.com/binyue/p/12095310.html

    Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现

     

    服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos。

    一、Spring Cloud 服务注册和发现组件

    1.Spring Cloud Eureka 闭源风波

    在Spring Cloud的子项目中,Spring Cloud Netflix提供了Eureka来实现服务的发现功能,Eureka的服务发现包含两大组件:

    服务端发现组件(EurekaServer)和客户端发现组件(Eureka Client)。

    Eureka的服务发现机制如图所示。

    当客户端服务通过注解等方式嵌入到程序的代码中运行时,客户端发现组件就会向注册中心注册自身提供的服务,并周期性地发送心跳来更新服务,

    如果连续三次心跳都不能够发现服务,那么Eureka就会将这个服务节点从服务注册表中移除。

    各个服务之间会通过注册中心的注册信息以Rest方式来实现调用,并且可以直接通过服务名进行调用。

    2012年,Netflix 将 Euerka 开源,Euerka 在 Spring Cloud 中广泛应用,但是2018年6月, Netflix 宣布 Euerka 2.0 闭源,目前社区中集成的都是1.0版本。

    闭源之后,服务发现选择哪个组件,答案就是 Nacos。

    2.阿里巴巴开源 Nacos

    阿里巴巴官方给Nacos的定位是「一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台」。

    Nacos支持的功能包括服务发现,集成配置中心,和服务数据管理。

     

    二、Nacos本地安装和启动

    可以通过源码和发行包两种方式来获取 Nacos,下面我们下载源码并且构建。

    从 Github 上下载源码并编译

    1
    2
    3
    4
    5
    6
    7
    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease-nacos clean install -U 
    ls -al distribution/target/
     
    // change the $version to your actual path
    cd distribution/target/nacos-server-$version/nacos/bin

      

    启动Nacos服务

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

    1
    sh startup.sh -m standalone

      

    Windows系统

    启动命令:

    1
    2
    3
    `
    cmd startup.cmd
    `

      


    或者双击startup.cmd运行文件

    应用启动之后,访问 http://127.0.0.1:8848/nacos/,Nacos0.8 版本已经支持简单登录功能,默认用户名/密码为: nacos/nacos。

     

    三、集成 Spring Cloud 服务发现

    如果你还不是很熟悉 Spring Cloud 项目的创建,可以先看一下前面这篇博文,。

    最新的版本关系查看 版本说明Wiki

    创建服务提供者

    1.新建 Spring Boot 工程,命名为 nacos-spring-cloud,在中添加 Nocos 的依赖,注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                    <version>0.2.2.RELEASE</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba.nacos</groupId>
                    <artifactId>nacos-client</artifactId>
                    <version>1.1.0</version>
                </dependency>
            </dependencies>
        </dependencyManagement>

    2.添加一个模块,nacos-spring-cloud-provider,作为 服务提供者,Pom文件配置如下

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.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.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.1.0.Final</version>
            </dependency>
        </dependencies>

    3.创建启动类,在启动类中添加一个Restful类型的方法,作为服务实现。

    @SpringBootApplication
    @EnableDiscoveryClient
    @RestController
    public class NacosProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosProviderApplication.class, args);
        }
    
        @RequestMapping(value = "/hello/{string}", method = RequestMethod.GET)
        public String echo(@PathVariable String string) {
            return "Hello " + string;
        }
    }
    

    4.修改配置文件,注册到 Nacos 控制台。

    server.port=8070
    spring.application.name=service-provider
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    5.启动工程,查看 Nacos 控制台。

     

    创建服务消费者

    1.添加一个新 module,nacos-spring-cloud-consumer,作为服务消费者。

    2.在启动类中添加一个Restful类型的方法,Pom文件依赖如下:

    <properties>
            <spring-cloud-openfeign.version>2.0.0.RELEASE</spring-cloud-openfeign.version>
            <spring-cloud-netflix.version>2.0.0.RELEASE</spring-cloud-netflix.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                <version>${spring-cloud-netflix.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>${spring-cloud-openfeign.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.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>
        </dependencies>

    3.创建启动类和测试方法,来调用提供者的服务。

    @SpringBootApplication
    @EnableDiscoveryClient
    public class NacosConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosConsumerApplication.class, args);
        }
    
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }

    通过RestTemplate调用服务:

    @RestController
    public class TestController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping(value = "/hello/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            return restTemplate.getForObject("http://service-provider/hello/" + str, String.class);
        }
    }

    4.修改配置文件,订阅服务

    server.port=8080
    spring.application.name=service-consumer
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    5.启动工程,查看 Nacos 控制台。

    6.测试服务调用,正常返回。

    四、总结

    这个小教程用一个简单的示例,搭建了基于Nacos的 Spring Cloud 服务发现,可以看到 Nacos 的控制台还有配置管理的功能,下一节会学习 Nacos 的配置管理。

  • 相关阅读:
    沿着河边走,环城60公里
    与客家土楼的约会(叶剑英故居福建)
    与客家土楼的约会(增城河源)
    与客家土楼的约会(东源龙川)
    C#几个经常犯错误
    C# 获取当前路径方法
    C# Stopwatch与TimeSpan详解
    话说程序员成熟的标志
    C#开源项目介绍
    C#各种加密算法的研究
  • 原文地址:https://www.cnblogs.com/xichji/p/12105435.html
Copyright © 2011-2022 走看看