1. 程式人生 > 其它 >Spring Cloud 從入門到精通(二)整合 Nacos 構建微服務實現服務註冊

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、Python、Redis快取、Spring原始碼、各大主流框架、Web開發、大資料技術、Storm、Hadoop、MapReduce、Spark、ElasticSearch、單點登入統一認證、分散式框架、叢集、安卓開發、iOS開發、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非關係型資料庫、運維等。