kankan(good)springcloud

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

2023-02-05  本文已影响0人  AC编程

总概

A、技术栈
B、源码地址

alanchenyan/ac-mall2-cloud

C、本节实现目标
D、系列
E、版本说明
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 数据库只需如下三点即可完成:

#*************** 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记录了,如下图所示:

查询表
上一篇下一篇

猜你喜欢

热点阅读