6

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

 3 years ago
source link: https://my.oschina.net/freelife/blog/5152427
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 parentfrom 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 projectfor 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 URLsas dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties availableon 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) beneathbase path'/actuator'
2020-03-26 21:29:59.428  INFO 34272 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat startedon 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 SpringCloudNacosStudyDemo01Applicationin 14.489 seconds (JVM runningfor 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 initializationin 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、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、ElasticSearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK