天天看点

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会在后面的文章中介绍.

继续阅读