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

news2025/5/13 12:03:24

总概

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、本节实现目标

  • 项目[mall2]各server注册到Nacos服务,并通过Nacos服务名访问接口。
  • 使用Nacos命名空间,创建dev_id/dev_name命名空间用于注册开发环境服务。
  • 使用Naocs共享配置,将各个服务都需要用的配置抽取成common.yml。
  • IDEA配置Active profiles

C、版本说明

  • Nacos:2.0.0
  • spring-cloud.version:Hoxton.SR9
  • spring-boot.version:2.3.6.RELEASE
  • alibaba.cloud.version:2.2.3.RELEASE

D、Nacos地址

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

E、Nacos部署环境

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

H、Nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景

一、Nacos安装

可参考:

  • Nacos 快速开始、Nacos Spring Cloud 快速开始

 

运行成功后访问: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记录了,如下图所示:

查询表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【腾讯云 Finops Crane 集训营】云架构成本大,浪费支出太高?何不试试Crane

一、前言 近年来&#xff0c;很多公司随着业务的发展都开始采用云原生的架构方式来部署服务系统&#xff0c;以便满足系统的弹性需求。但随着业务的进一步增长&#xff0c;k8s的节点数不断的增加&#xff0c;每个月消耗的费用也随之增加&#xff0c;导致了资源的利用率并不平均…

Python自动化办公对每个子文件夹的Excel表加个表头(Excel同名)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 玉容寂寞泪阑干&#xff0c;梨花一枝春带雨。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python粉丝【彩】问了一个Python自动化办公处理的问题&…

python整合合并两个excel文件,保留各自excel文件的样式,包含字体大小和字体颜色等格式

一、实现目标 现有两个excel文件data1.xlsx和data2.xlsx,要求将这两个excel文件合并为一个excel文件,同时保留这两个excel文件各自带有的样式,包括字体、颜色等格式需要保留。 data1.xlsx: …

装饰者设计模式解读

问题引进 星巴克咖啡订单项目&#xff08;咖啡馆&#xff09;&#xff1a; 1) 咖啡种类/单品咖啡&#xff1a;Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 2) 调料&#xff1a;Milk、Soy(豆浆)、Chocolate 3) 要求在扩展新的咖啡种类时&#x…

Redis主从集群搭建及其原理

Redis主从集群搭建及其原理 1.Redis主从1.1.搭建主从架构1.2.准备实例和配置1.3.启动1.4.开启主从关系1.5.测试 2.主从数据同步原理2.1.全量同步2.2.增量同步2.3.repl_backlog原理 3.主从同步优化4.小结 1.Redis主从 1.1.搭建主从架构 单节点Redis的并发能力是有上限的&#…

车辆合格证怎么转为结构化excel数据?

一、为何要将车辆合格证转为结构化excel&#xff1f; 车辆合格证是在车辆制造完成后&#xff0c;经过各项检测合格的证明。对于车辆行业来说&#xff0c;车辆合格证是一种重要的合规证明&#xff0c;在车辆的生产制造、售后服务、质量管理等各个环节中都有着重要的作用。同时&…

【架构】常见技术点--监控告警

导读&#xff1a;收集常见架构技术点&#xff0c;作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务&#xff0c;技术跟业务具体结合才能发挥技术的价值。 目录 1. 服务监控 2. 全链路监控 2.1 服务拨测 2.2 节点探测 2.3 告警过滤 2.4 告警去重 …

内网 monorepo 配置指南(PNPM、YARN、Rush.js)

此处的内网是指没办法连接互联网进行依赖下载的环境&#xff0c;本文以windows平台为例 背景说明 绝大部分政府机关、国有企业都是在内网开发&#xff0c;无法从互联网同步依赖&#xff0c;就需要另辟蹊径解决项目依赖的问题。 传统的单包项目还好&#xff0c;从互联网机器将…

音视频技术开发周刊 | 294

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 五问「ChatGPT医学影像」&#xff1a;新一代的 AI 能否成为放射科医生的一把利器&#xff1f; 在医学等专业性较强的领域内&#xff0c;ChatGPT的表现还不够好&#xff0c…

Linux 防火墙 SNAT DNAT

SNAT原理与应用 SNAT 应用环境 局域网主机共享单个公网IP地址接入Internet &#xff08;私有IP地址不能在Internet中正常路由&#xff09; SNAT原理 修改数据包的源地址 SNAT可以认为是路由器NAT中的easy ip DNAT可以认为是路由器NAT中的 nat server SNAT将 内网源地址 转化为网…

【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-Diff

1. 前言 在上一篇文章介绍VNode的时候我们说了&#xff0c;VNode最大的用途就是在数据变化前后生成真实DOM对应的虚拟DOM节点&#xff0c;然后就可以对比新旧两份VNode&#xff0c;找出差异所在&#xff0c;然后更新有差异的DOM节点&#xff0c;最终达到以最少操作真实DOM更新…

FasterRCNN训练自己的数据集

2016年提出的Faster RCNN目标检测模型是深度学习现代目标检测算法的开山之作&#xff0c;也是第一个真正全流程都是神经网络的目标检测模型。 其主要步骤如下&#xff1a; 1&#xff0c;使用CNN对输入图片提取feature map. 2&#xff0c;对feature map上的每个点设计一套不同大…

Roboflow的使用

文章目录 前言一、使用labelimg标注数据集二、导入roboflow1.注册roboflow账户2.导入图片2.1 创建工作区workspace&#xff08;非必须&#xff09;2.2 创建项目 project2.3 导入 3、导出图片4、同一个数据集可以导出不同类型 前言 我自己也是一个小白不是很会&#xff0c;如果…

ASO优化之怎么做好关键词本地化覆盖

如果想要我们的应用走向国际化&#xff0c;被多个国家/地区使用&#xff0c;那么做好关键词本地化覆盖至关重要。我们可以主要针对中文和英文进行设置&#xff08;准备两套元数据&#xff09;&#xff0c;这样能够迅速增加应用商店ASO关键词覆盖数量。 那么我们要在哪里设置&a…

小白也能懂的薛斯通道抄底指标以及公式(附源码)

什么是薛斯通道&#xff1f; 上个世纪70年代&#xff0c;美国人薛斯最早发明了薛斯通道。 他本人曾是研究火箭运行的。 薛斯通道包括两组通道指标&#xff0c;分别是长期大通道指标&#xff08;100天&#xff09;和短期小通道指标&#xff08;10天&#xff09;。 股价实际上是被…

Netflix 团队解决了 Linux 内核中的 FUSE 死锁

Laf 公众号已接入了 AI 绘画工具 Midjourney&#xff0c;可以让你轻松画出很多“大师”级的作品。同时还接入了 AI 聊天机器人&#xff0c;支持 GPT、Claude 以及 Laf 专有模型&#xff0c;可通过指令来随意切换模型。欢迎前来调戏&#x1f447; <<< 左右滑动见更多 &…

Go与神经网络:张量运算

0. 背景 2023年年初&#xff0c;我们很可能是见证了一次新工业革命的起点&#xff0c;也可能是见证了AGI(Artificial general intelligence&#xff0c;通用人工智能)[1]孕育的开始。ChatGPT应用以及后续GPT-4大模型的出现&#xff0c;其震撼程度远超当年AlphaGo战胜人类顶尖围…

微信小程序-页面跳转wxAPI

官方文档地址&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html wx.navigateTo(Object object) 更改首页代码&#xff0c;添加一个按钮&#xff0c;绑定一个事件的点击&#xff1a; <!--index.wxml--> <text>首页</t…

《前端》HTML常用标签

文章目录 HTML导读HTML格式常用标签标题标签段落标签格式化标签超链接标签标签的几种形式 表格标签列表标签表单标签按钮标签无语义标签 ​&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;前端 HTML导读 html是超文本标记语言 一般直接运行在…

33从零开始学Java之方法的递归调用到底是怎么回事?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在之前的文章中&#xff0c;壹哥给大家讲解了方法的定义、调用及参数、返回值等内容&#xff0c;接下…