• Spring Cloud 从入门到精通(二)集成 Nacos 构建微服务实现服务注册


    阿里巴巴开源 Nacos 定位是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 支持的功能包括服务发现,集成配置中心,和服务数据管理。本篇文章主要向大家分享关于 Spring Cloud Alibaba 集成 Nacos 框架来实现服务注册。服务注册是指项目启动的时候,生产者将当前服务自身的信息地址注册到Nacos server 注册中心。

    创建Maven项目

    新建discovery-nacos-provider-demo01命名的项目。Maven项目搭建完成后,整体目录结构如下图所示:

    新建pom.xml文件

    在文件中增加依赖jar包配置信息,具体参考如下:

    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.5.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.lidong</groupId>
        <artifactId>discovery-nacos-provider-demo01</artifactId>
        <version>1.0.0</version>
        <name>discovery-nacos-provider-demo01</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
            <gson.version>2.8.6</gson.version>
            <spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>${gson.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
        <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>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/milestone</url>
            </repository>
        </repositories>
    </project>

    注:对于引入依赖的jar包简单说明一下,本案例使用的是Spring Boot 2.2.5.RELEASE版本和Spring Cloud Alibaba 2.2.0.RELEASE版本,注意使用版本的兼容性,否则容易报错。

    1)健康检查依赖于此包  spring-boot-starter-actuator

    2)Spring Cloud nacos 的服务发现支持  spring-cloud-starter-alibaba-nacos-discovery

    配置数据源源

    在application.yml文件中添加配置信息如下:

    server:
      port: 9001
    spring:
      application:
        name: discovery-nacos-provider
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848

    配置参数说明:

    server.port:9001 服务提供者的端口

    spring.application.name 指注册到nacos server的名称,在后续发布的“Spring Cloud Alibaba 集成 Nacos 构建微服务实现服务发现”章节【关注素文宅博客网站,Spring Cloud Alibaba框架系列文章持续更新中,微信公众号“Java精选”,切换至聚合->开源项目->包含Spring Boot和Spring Cloud等系列文章】中会根据这个名称来进行服务调用。

    spring.application.cloud.nacos.discovery.server-addr: 127.0.0.1:8848 nacos地址和端口号默认是127.0.0.1:8848,若果没有配置hosts参数其默认的地址是localhost,nacos服务会占用8848端口。

    新建实体类文件

    新建BootUser实体类文件,用于赋值数据并返回给Json串数据给调用方,代码如下:

    package com.yoodb.study.nacos.demo01;
    public class BootUser {
        private Integer id;
        private String name;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    新建注册服务

    新建HelloWorldController类文件,提供provider接口,返回一个json字符串给调用方,具体代码如下:

    package com.yoodb.study.nacos.demo01;
    import com.google.gson.Gson;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    public class HelloWorldController {
        @RequestMapping("/provider/{id}")
        public String provider(@PathVariable("id")Integer id) {
            BootUser user = new BootUser();
            user.setId(id);
            user.setName("关注微信公众号“Java精选”,Spring Cloud系列文章持续更新中" +
                    ",带你从入门到精通,玩转Spring Cloud框架。");
            String jsons = new Gson().toJson(user);
            return jsons;
        }
    }

    添加启动类

    新建SCNSDemo01Application类文件,具体代码如下:

    package com.yoodb.study.nacos.demo01;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    /**
     * 服务注册
     */
    @EnableDiscoveryClient
    @SpringBootApplication
    public class SCNSDemo01Application {
    public static void main(String[] args) {
    SpringApplication.run(SCNSDemo01Application.class, args);
    }
    }

    @EnableDiscoveryClient注解是指开启服务发现支持,让注册中心能够发现,扫描到该服务。

    启动Maven项目

    项目启动成功后,输出日志参考如下:

    2020-03-26 21:29:55.474  INFO 34272 --- [           main] c.n.c.sources.URLConfigurationSource     : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
    2020-03-26 21:29:55.707  INFO 34272 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
    2020-03-26 21:29:55.821  INFO 34272 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'Nacso-Watch-Task-Scheduler'
    2020-03-26 21:29:59.313  INFO 34272 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
    2020-03-26 21:29:59.428  INFO 34272 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9001 (http) with context path ''
    2020-03-26 21:29:59.573  INFO 34272 --- [           main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, DEFAULT_GROUP discovery-nacos-provider 10.115.51.132:9001 register finished
    2020-03-26 21:30:01.276  INFO 34272 --- [           main] d.SpringCloudNacosStudyDemo01Application : Started SpringCloudNacosStudyDemo01Application in 14.489 seconds (JVM running for 17.618)
    2020-03-26 21:30:02.201  INFO 34272 --- [)-10.115.51.132] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2020-03-26 21:30:02.202  INFO 34272 --- [)-10.115.51.132] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2020-03-26 21:30:02.211  INFO 34272 --- [)-10.115.51.132] o.s.web.servlet.DispatcherServlet        : Completed initialization in 9 ms

    服务提供者发布成功。

    请求接口地址:http://localhost:9001/provider/1,查看接口返回结果:

    {"id":1,"name":"关注微信公众号“Java精选”,Spring Cloud系列文章持续更新中,带你从入门到精通,玩转Spring Cloud框架。"}

    访问Nacos server地址,该服务在“Spring Cloud 从入门到精通(一)Nacos 服务中心初探”章节已经讲述过,不了解的朋友可以翻看一下,在此处就省略了:

    http://192.168.101.196:8848/nacos/index.html

    在控制台会发现服务列表中有一个名为discovery-nacos-provider的服务。

    点击控制台详情按钮,可以查看服务的详细信息,参考如图所示:

    本文篇文章的项目源码(discovery-nacos-provider-demo01)地址:https://github.com/yoodb/springcloud

    至此,关于Spring Cloud 集成 Nacos框架实现服务注册配置完毕,后续Spring Cloud系列文章持续更新中。下面朋友们可以试一试搭建项目,有什么疑问欢迎下方留言。


    欢迎扫码关注公众号:“Java精选”(w_z90110),回复关键字领取资料:如Mysql,Hadoop,Dubbo,CAS源码等等,免费领取视频教程、资料文档和项目源码。

    欢迎扫码小程序:“Java精选面试题”,内涵3000+道面试题及6000+道选择题,免费在线刷题,选择题带有答案解析,支持随时随地刷题!

    公众号涵盖:各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、职业规划、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。

  • 相关阅读:
    编写通用shell脚本启动java项目,适用于多数服务,只需修改服务名即可
    linux操作系统安装jdk
    搭建dubbo+zookeeper+dubboadmin分布式服务框架(windows平台下)
    二.传统服务的拆分策略
    一.把传统服务做成dubbo分布式服务架构的步骤
    Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
    Android WebRTC 音视频开发总结(五)-- webrtc开发原型
    Android WebRTC 音视频开发总结(四)-- webrtc传输模块
    Android WebRTC 音视频开发总结(三)-- 信令服务和媒体服务
    Android WebRTC 音视频开发总结(二)-- webrtcdemo介绍
  • 原文地址:https://www.cnblogs.com/MrYoodb/p/15073734.html
Copyright © 2020-2023  润新知