天天看點

SpringCloud Alibaba的nacos 作為注冊中心

前言

nacos可以作為微服務的注冊中心 .,也可以作為配置中心, 功能強大. 但是在生産環境中還是不要把nacos 既作為配置中心, 又當做注冊中心, 因為這兩個都是微服務中十分重要的子產品, 如果把他們合在一起風險太大. 可以建議你部署兩個nacos(叢集)來分别作為注冊中心和配置中心.

項目結構

SpringCloud Alibaba的nacos 作為注冊中心

最外面的pom 檔案的内容如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-build</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>xyz.xiezc</groupId>
    <artifactId>dailyMaven</artifactId>
    <packaging>pom</packaging>
    <version>0.0.1-SNAPSHOT</version>
    
    <modules>
        <module>db-jpa</module>
    </modules>

    <name>dailyMaven</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <!-- 正常jar -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
           

db-jpa子產品的配置POM如下

<?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">
    <parent>
        <artifactId>dailyMaven</artifactId>
        <groupId>xyz.xiezc</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>db-jpa</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <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>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

</project>
           

在resource目錄下增加

application.yml

配置檔案:

server:
  ## 端口号
  port: 8001   
spring:
  application:
    ## 項目名, 很重要 後面微服務的之間的調用會根據這個來進行路由
    name: db-jpa
  cloud:
    nacos:
      discovery:
        #配置nacos位址
        server-addr: www.abc.com:8848

#打開全部監控端點
maagement:
  endpoints:
    web:
      exposure:
        include: '*'

           

增加啟動類

啟動類代碼如下:

package com.abc.db;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableDiscoveryClient
public class DbApplication {
    public static void main(String[] args) {
        SpringApplication.run(DbApplication.class,args);
    }

    @Slf4j
    @RestController
    static class TestController {
        @GetMapping("/hello")
        public String hello(@RequestParam String name) {
            log.info("invoked name = " + name);
            return "hello " + name;
        }
    }
}

           

接下來點選執行即可

運作結果

打開我上篇文章Docker配置的nacos 注冊中心位址, 可以看到服務已經注冊上去了.

SpringCloud Alibaba的nacos 作為注冊中心

接口也可以直接通路

SpringCloud Alibaba的nacos 作為注冊中心

監控也正常

SpringCloud Alibaba的nacos 作為注冊中心

總結

db-jpa 是我用來專門通路資料庫的一個微服務, 這種設計有利和弊;

優點:

  • 資料庫可以統一管理, 屏蔽其他微服務都資料庫的通路
  • 切換修改資料庫可以隻修改者一個微服務, 不影響其他的微服務

缺點:

  • 都使用微服務了, 說明系統壓力大, 會導緻這個服務壓力過大,
  • 容易出現單點故障. 這個服務挂了導緻都不可通路資料庫

微服務的劃分有需要要考慮的地方, 沒有萬全的方案, 我之是以這樣搞, 是因為這是我的業餘項目.

這裡一個最最基本的服務注冊到nacos 完成了, 這個服務中我隻是簡單的提供一個http接口, 如果要完整的微服務需要你接入 其他的子產品, 本來這個微服務我定義的是專門用來通路資料庫的. 并且使用dubbo對外提供rpc調用服務, 如何接入dubbo會在後面的文章中介紹.

繼續閱讀