zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba nacos 配置中心使用

    背景

    上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心

    spring-cloud-alibaba-basis 创建基础依赖

    首先我们创建一个spring-cloud-alibaba-basis 基础依赖 工程里面制定我们要用到的公用的版本

    • spring boot 版本 2.1.7.RELEASE
    • spring cloud 版本 Greenwich.RELEASE
    • spring cloud 阿里巴巴的版本 2.1.0.RELEASE
    • Spring IO Platform 版本依赖
       <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.xian.cloud</groupId>
        <artifactId>spring-cloud-alibaba-basis</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
    
        <name>spring cloud alibaba 总pom</name>
        <description>spring cloud alibaba 教程总pom版本控制</description>
        <modules>
            <module>cloud-discovery-server</module>
            <module>cloud-discovery-client-common</module>
        </modules>
        <!--<parent>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-parent</artifactId>-->
            <!--<version>2.1.7.RELEASE</version>-->
            <!--<relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
        <!--</parent>-->
    
        <properties>
            <!-- 基本属性 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <java.version>1.8</java.version>
            <!-- 版本属性 -->
            <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
            <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
            <spring-boot.version>2.1.7.RELEASE</spring-boot.version>
            <spring-platform.version>Cairo-SR8</spring-platform.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <!-- 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>
                <!--支持Spring Boot 2.1.X-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--Greenwich.RELEASE-->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--
                Spring IO Platform,简单的可以认为是一个依赖维护平台,该平台将相关依赖汇聚到一起,针对每个依赖,都提供了一个版本号
                完整的依赖列表 https://docs.spring.io/platform/docs/current/reference/html/appendix-dependency-versions.html
                 -->
                <dependency>
                    <groupId>io.spring.platform</groupId>
                    <artifactId>platform-bom</artifactId>
                    <version>${spring-platform.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    		<!-- 子项目公共依赖的jar包 -->
        <dependencies>
            <!-- 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>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </project>
    

    Spring IO Platform 这个jar包有兴趣的同学可以去关注一下他里面进行了第三方常用jar包的版本管理。每个spring 对应的第三方jar版本都罗列在上面了。这样方便我们对于第三方jar包的版本管理。#为了解决jar包版本冲突而存在
    sping boot 除了提供我们熟知的 方式以外 还有spring-boot-dependencies 依赖方式。

    这样我们在新建俩个module

    服务提供者 cloud-discovery-server

      <parent>
            <groupId>com.xian.cloud</groupId>
            <artifactId>spring-cloud-alibaba-basis</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <artifactId>cloud-discovery-server</artifactId>
        <description>服务提供者</description>
        <name>服务提供者</name>
    
    

    因为我们在父类的pom里面定义了公共依赖的jar包,所以我们不需要再次引入jar包只需要制定parent pom就可以继承这些jar包。同样下面的消费者服务我也会同样如此利用maven的jar包传递方式进行案例的开发

    创建服务启动类 和对外服务的controller 类

    • 启动类
    package com.xian.cloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    /**
     * @Author: xlr
     * @Date: Created in 2:44 PM 2019/10/27
     */
    @EnableDiscoveryClient
    @SpringBootApplication
    public class DiscoveryServerApplication {
    
    
        public static void main(String[] args) {
            SpringApplication.run(DiscoveryServerApplication.class, args);
        }
    }
    
    • 对外提供服务的http接口
    package com.xian.cloud.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @Author: xlr
     * @Date: Created in 2:57 PM 2019/10/27
     */
    @RestController
    @RequestMapping("server")
    @Slf4j
    public class DiscoverCotroller {
    
    
        /**
         * 对外提供的服务 HTTP接口
         * @param name
         * @return
         */
        @GetMapping("/hello")
        public String hello(@RequestParam String name) {
            log.info("invoked name = " + name);
            return "hello " + name;
        }
    
    
    }
    
    
    

    编写YAML文件

    server:
      port: 9012
    
    spring:
      profiles:
        active: dev
      application:
        name: cloud-discovery-server
      cloud:
        nacos:
          discovery:
            server-addr: 47.99.209.72:8848
    

    服务消费者 cloud-discovery-client

        <parent>
            <artifactId>spring-cloud-alibaba-basis</artifactId>
            <groupId>com.xian.cloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>cloud-discovery-client</artifactId>
        <name>服务消费者</name>
    

    创建服务启动类 和调用服务提供者的的controller http接口

    • 启动类
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    /**
     * @Author: xlr
     * @Date: Created in 3:03 PM 2019/10/27
     */
    @EnableDiscoveryClient
    @SpringBootApplication
    public class DiscoveryClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DiscoveryClientApplication.class, args);
        }
    }
    
    
    • 消费者服务接口
    package com.xian.cloud.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * @Author: xlr
     * @Date: Created in 3:04 PM 2019/10/27
     */
    @RequestMapping("client")
    @RestController
    @Slf4j
    public class DiscoveryClientController {
    
        //服务提供者 项目名称 spring.application.name
        public static final String CLOUD_DISCOVERY_SERVER = "cloud-discovery-server";
    
        /**
         * 在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClient、LoadBalancerClient等。
         * 从LoadBalancerClient接口的命名中,是一个负载均衡客户端的抽象定义
         */
        @Autowired
        private LoadBalancerClient loadBalancerClient;
    
        @RequestMapping(value = "/test",method = RequestMethod.GET)
        public String test() {
            ServiceInstance serviceInstance = loadBalancerClient.choose(CLOUD_DISCOVERY_SERVER);
            log.info( "ServiceInstance :{}",serviceInstance );
            String url = serviceInstance.getUri() + "/server/hello?name=" + "tom";
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject(url, String.class);
            return "调用 " + url + ", 返回 : " + result;
        }
    }
    
    

    编写YAML文件

    server:
      port: 9011
    
    spring:
      profiles:
        active: dev
      application:
        name: cloud-discovery-client
      cloud:
        nacos:
          discovery:
            server-addr: 47.99.209.72:8848
    

    然后启动服务
    查看nacos控制台
    file

    显示俩个服务都已经注册到了 nacos注册中心

    然后我们就请求http://localhost:9011/client/test 看看是否能够显示我们想要的结果
    file

    到此时已经完成了我们注册中心。可以在提供服务者处改变端口是否能进行负载均衡

    服务端又分别启动了 9013、9014俩个端口 服务
    file

    再次进行测试http://localhost:9011/client/test

    file

    到此时我的注册中心、负载均衡已经全部实现完毕。

    参考资料

    nacos官方文档

    spring cloud alibaba 官方文档

    示例代码

    github

    如何喜欢可以关注分享本公众号。
    file

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。转载请附带公众号二维码

  • 相关阅读:
    idp账号使用系列记录
    cocos2dxjs binding安卓运行时出现signal 11 (SIGSEGV) 程序闪退问题记录
    cocos2dx 2.1.1 javascript在mac下跨平台编译粗略记录
    cocos2dx2.1使用Xcode整合ios与android开发代码 过程记录
    查找第k个数字的位置
    准备编写ogl2dlib的动画脚本编辑器
    开始学习nebula2 sdk
    地铁尴尬事件
    坦克物理模型(ode)
    MBTI职业性格测试(Psytopic特别版)
  • 原文地址:https://www.cnblogs.com/cloudxlr/p/11749939.html
Copyright © 2011-2022 走看看