微服务开发系列 第二篇:Nacos

总概

A、技术栈
  • 开发语言:Java 1.8
  • 数据库:MySQL、Redis、MongoDB、Elasticsearch
  • 微服务框架:Spring Cloud Alibaba
  • 微服务网关:Spring Cloud Gateway
  • 服务注册和配置中心:Nacos
  • 分布式事务:Seata
  • 链路追踪框架:Sleuth
  • 服务降级与熔断:Sentinel
  • ORM框架:MyBatis-Plus
  • 分布式任务调度平台:XXL-JOB
  • 消息中间件:RocketMQ
  • 分布式锁:Redisson
  • 权限:OAuth2
  • DevOps:Jenkins、Docker、K8S
B、源码地址

alanchenyan/ac-mall2-cloud

C、本节实现目标
  • 项目[mall2]各server注册到Nacos服务,并通过Nacos服务名访问接口。
  • 使用Nacos命名空间,创建dev_id/dev_name命名空间用于注册开发环境服务。
  • 使用Naocs共享配置,将各个服务都需要用的配置抽取成common.yml。
  • IDEA配置Active profiles
D、系列
E、版本说明
  • Nacos:2.0.0
  • spring-cloud.version:Hoxton.SR9
  • spring-boot.version:2.3.6.RELEASE
  • alibaba.cloud.version:2.2.3.RELEASE
F、Nacos地址

Nacos官网文档
Nacos官方GitHub地址
Nacos官方下载地址

G、Nacos部署环境

Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。

H、Nacos支持三种部署模式
  • 单机模式 - 用于测试和单机试用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景

一、Nacos安装

可参考:

运行成功后访问:http://localhost:8848/nacos 。默认账号:nacos,密码:nacos

登录页
主页

二、服务mall-member接入Nacos

2.1 加nacos依赖

服务mall-pom服务加入naocs依赖,mall-pom.xml:

 <!-- 管理子类所有的jar包的版本,这样的目的是方便去统一升级和维护 -->
<dependencyManagement>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>${alibaba.cloud.version}</version>
   </dependency>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>${alibaba.cloud.version}</version>
    </dependency>

<!--  其他省略-->
</dependencyManagement>


 <!-- 所有的子工程都会自动加入下面的依赖  -->
<dependencies>
    <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

   <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
   </dependency>

<!--  其他省略-->
</dependencies>
2.2 yml配置

在mall-member服务的application-dev.yml配置中加入配置

spring:
  application:
    name: mall-member
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
2.3 重启mall-member服务查看nacos服务列表
mall-member服务

其他server接入nacos同理。

三、Nacos命名空间

3.1 Nacos如何支持多环境

在日常使用中常常需要不同的环境,比如日常,预发,线上环境,如果是逻辑隔离可以使用命名空间,Nacos支持命名空间来支持多环境隔离,可以在Nacos控制台创建多个命名空间。如果需要物理隔离,就要部署多套Nacos环境。

3.2 配置Nacos命名空间

默认在Nacos中存在一个public命名空间,所有配置在没有指定命名空间时都在这个命名空间中获取配置,在实际开发时可以针对于不能环境创建不同的namespace空间。

注意:默认空间不能删除。

3.2.1 新增命名空间
新增命名空间g
创建命名空间

【命名空间ID】如果在新增时没有填写的话,则Nacos服务端会自动随机产生一个命名空间ID。 每个命名空间都有一个唯一ID,这个ID是读取配置时指定空间的唯一标识。点击【确定】以后,在命名空间列表处会新增一行记录。

建议:正式项目中,建议将【命名空间ID】和【命名空间名】设置成相同,即都设置成dev。此处只是为了比较清晰的说明在yml配置文件中ID和名字的区别,才设置了不同的名字。

记录
3.2.2 yml配置

在mall-member服务的application-dev.yml配置中加入配置

spring:
  application:
    name: mall-member
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
      discovery:
        namespace: dev_id
补充说明NO.1

有些文章会配置nacos用户名和密码,即如下所示:

spring:
  application:
    name: mall-member
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: abc123
      discovery:
        namespace: dev_id

其实这个用户名和密码是个Naocs的Dashboard登录用的,服务注册这里不需要配置,当然配置了也不会报错。

3.2.3 重启mall-member服务查看nacos服务列表

在dev_name命名空间下,显示了mall-member服务。

dev_name命名空间服务列表

四、修改Nacos登录密码和登录名称

一般安装Nacos后登录密码默认都是nacos/nacos,但是在正式的生成环境这样肯定是不安全的。

4.1 Nacos单机默认内嵌的数据库

Nacos单机模式默认使用内嵌的数据库作为存储引擎,所以我们无法直接去修改数据,因此我们可以通过Nacos的Dashboard来修改密码。

修改密码
修改密码
4.2 MySQL修改密码
4.2.1 查看Nacos源码加密方式

Nacos底层源码是BCryptPasswordEncoder加密器加密,我们这里使用该加密器就可以。

package com.alibaba.nacos.console.utils;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordEncoderUtil {
    public static void main(String[] args) {
        System.out.println(new BCryptPasswordEncoder().encode("nacos"));
    }

    public static Boolean matches(String raw, String encoded) {
        return new BCryptPasswordEncoder().matches(raw, encoded);
    }

    public static String encode(String raw) {
        return new BCryptPasswordEncoder().encode(raw);
    }
}

使用 BCryptPasswordEncoder加密器加密
导入Security的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

加密得到密文

public class UserServerApplication {
    public static void main(String[] args) {
        System.out.println(new BCryptPasswordEncoder().encode("nacosDev"));
    }
}
密文
4.2.2 构造用户,修改密码

复制到nacos的user表中password字段中,我这里构造了用户名:nacosDev,密码也是使用的nacosDev加密的密文。

修改密码

使用设置的用户密码登录


登录

五、Nacos共享配置

日常开发中,多个模块可能会有很多共用的配置,比如数据库连接信息,Redis 连接信息,RabbitMQ 连接信息,监控配置等等。那么此时,我们就希望可以加载多个配置,多个项目共享同一个配置之类等功能,Nacos Config 也确实支持。

5.1 新建common.yml

登录Naocs平台,在命名空间dev_name下新建common.yml配置文件,将公共的配置抽取出来放到该配置中,如下:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.100.51:3306/ac_db?serverTimezone=Asia/Shanghai&useUnicode=true&tinyInt1isBit=false&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username: ac_u
    password: ac_PWD_123

    #hikari数据库连接池
    hikari:
      pool-name: YH_HikariCP
      minimum-idle: 10 #最小空闲连接数量
      idle-timeout: 600000 #空闲连接存活最大时间,默认600000(10分钟)
      maximum-pool-size: 100 #连接池最大连接数,默认是10
      auto-commit: true  #此属性控制从池返回的连接的默认自动提交行为,默认值:true
      max-lifetime: 1800000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000
      connection-test-query: SELECT 1

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
common.yml配置文件
5.2 配置文件将application改成bootstrap

application.yml作用域在于当前应用有效,bootstrap.yml系统级别的配置有效(一般采用远程配置的时候才会用到)。

因此,将项目中原来的application.yml、application-dev.yml对应改成bootstrap.yml、bootstrap-dev.yml 。

5.3 修改mall-member服务配置

bootstrap-dev.yml

server:
  port: 8080

spring:
  application:
    name: mall-member

  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: dev_id
        file-extension: yml
        shared-configs:
          - data-id: common.yml
            group: DEFAULT_GROUP
            refresh: true
      discovery:
        namespace: dev_id

swagger:
  enabled: true
  title: 用户服务
  basePackage: com.ac.member.controller
  version: 1.0
  description: 用户服务相关接口

bootstrap.yml

spring:
  profiles:
    active: dev

mall-product等其他服务配置同理。

mall-member
5.4 重启服务查看Nacos服务列表
image.png
六、IDEA配置Active profiles

各个环境的配置文件(比如切换开发和测试),我们之前都是通过bootstrap.yml配置来切换的,如下:

spring:
  profiles:
    active: dev

一般在项目开发中,团队里的每个成员一般都会自己建立一套独立的命名空间,以免影响他人,如果每个人都来修改bootstrap.yml里的配置项,代码容易产生冲突,因此spring.profiles.active我们可以从bootstrap.yml中移除掉,在IDEA里进行配置。

配置
配置Active profiles

重启服务,配置文件走的是dev环境。

六、Nacos配置MySQL数据库

参考官网:Nacos部署手册

6.1 前言

在 0.7 版本之前,在单机模式时 nacos 使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7 版本后增加了支持 mysql 数据源能力。

6.2 Nacos配置MySQL

nacos 支持配置多个数据库,通过 db.num 和 db.url.index的配置来控制。nacos 配置 mysql 数据库只需如下三点即可完成:

  • 安装数据库,版本要求:5.6.5+
  • 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  • 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.100.51:3306/ac_db?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=ac_u
db.password.0=ac_PWD_123
导入sql
导入sql成功
修改配置文件
6.3 验证

动Nacos 后,打开Nacos 管理界面,在命名空间模块,创建一个开发环境配置的命名空间dev_name ,如下图所示:

新建命名空间

此时再查看我们的数据库表tenant_info中已有创建的dev_name记录了,如下图所示:

查询表
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容