Nacos笔记

 nacos注册中心:

nacos注册中心得单击非持久化搭建:

  • 单机:指的是 Nacos 运行在单个实例上,通常用于开发和测试环境。
  • 非持久化:表示注册的信息(如服务实例、元数据等)不会被保存在数据库中。Nacos 运行时的数据是在内存中,重启或崩溃后,所有的注册信息将会丢失。

     优点:

  • 简单易用,启动速度快,适合开发测试用。
  • 无需额外配置数据库。

    缺点:

  • 数据不持久化,产品环境不适用,无法保证服务注册信息的持久性和可靠性。

Nacos 快速开始 | Nacos 官网 

官网上有详细步骤:

1:详细上来说就是下载解压压缩包

2:注册服务并用startup.cmd -m standalone命令开启,注意这里开发需要到nacos的bin目录下打开cmd输入startup.cmd -m standalone开启

 3:第三步我们就可以照着这上面的网址进行访问了

进入之后,如果我们有注册方法的话,这里就会有提示。

4:根据Dubbo框架的官方文档来使用nacos注册中心:

使用 Nacos 作为注册中心实现自动服务发现 | Apache Dubbo

总体说起来就是、

引入对应依赖(包括dubbo的依赖和nacos的依赖)

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.0.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.1.0</version>
        </dependency>

在配置文件中配置

# 以下配置指定了应用的名称、使用的协议(Dubbo)、注册中心的类型(Nacos)和地址
dubbo:
  application:
    # 设置应用的名称
    name: dubbo-springboot-demo-provider
  # 指定使用 Dubbo 协议,且端口设置为 -1,表示随机分配可用端口
  protocol:
    name: dubbo
    port: -1
  registry:
    # 配置注册中心为 Nacos,使用的地址是 nacos://localhost:8848
    id: nacos-registry
    address: nacos://localhost:8848

这些东西直接复制官网就行。

注意点:

这些配置和依赖在provider引入了,在consumer也需要引入,并且需要保持一致

上面是在本地部署,本地部署相对简单安装一个压缩包,输入命令即可。


nacos注册中心的持久化到 MySQL 模式:

  • 持久化:表示 Nacos 运行时的服务注册信息会保存在 MySQL 数据库中。这意味着即使 Nacos 实例重启或发生故障,注册的信息仍然可以恢复,确保服务的可用性和数据的一致性。

优点

  • 数据持久化,增强了系统的可靠性,适合生产环境。
  • 支持高可用部署,可以通过多个 Nacos 实例搭建集群。

缺点

  • 需要配置和维护 MySQL 数据库,增加了部署成本和复杂性。
  • 启动和初次配置可能会稍显复杂。

在本地的window电脑nacos配置持久化:

在本地的nacos进行持久化

在nacos/conf中有一个mysql-schema.sql这个sql脚本,作用就是利用mysql将nacos进行持久化,直接在本地执行里面的sql脚本,修改conf目录下的application.properties,最后重新启动即可

## If use MySQL as datasource:
## Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql

## Count of DB:
db.num=1

## Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

这一段配置可以直接在 application.properties中修改即可

在nacos中添加配置列表就可以在mysql中看到了

用docker容器的方式拉取nacos并且配置持久化

 1:需要配置mysql的脚本

这个直接在服务器配置好的mysql中执行即可。

这个脚本的位置:就在nacos中的conf中的有一个mysql-schema.sql这个sql脚本,在服务器的mysql执行这个脚本就行

2:创建nacos和mysql的配置文件:

可以新建一个文件夹nacos(这步是可选的,我是为了以后我方便找)

配置文件:

PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=自己的服务器ip地址
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3307//自己mysql的端口
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=123
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai

springdatasourceplatform就是指定了数据库的类型,说明nacos可以配置很多不同的数据库

接着往下就是自己的基本信息。

3:拉取镜像:

我这里拉取的是nacos/nacos-server:v2.1.0-slim

docker pull nacos/nacos-server:v2.1.0-slim

执行命令即可 

4:在对应文件目录中创建容器并运行,并访问登录页

这个对应文件目录就是你nacos存放的目录

直接在客户端内cd 到当前目录

并且执行:

docker run -d \
--name nacos \
--env-file ./nacos/custom.env \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=always \
nacos/nacos-server:v2.1.0-slim

注意第三行的 ./nacos/custom.env \

如果你上面没有新建文件夹就修改一下这个路径。

 启动完成后

我们也可以docker ps看一下

下一步需要注意

就是我用的是腾讯云的服务器

如果你装的是虚拟机那可以不用

如果是服务器,还要到外层去开一下对应的端口

需要开的端口有三个:

8848:这是 Nacos 的默认 HTTP 端口,用于提供 Nacos 的 Web 界面和服务 API

9848:这个端口是 Nacos 的 若干功能服务的卸载装载

9849:这个端口通常用于 Nacos 的 gRPC 相关服务

要不然服务器无法访问登录页

开放了端口之后就可以访问登录页了

账号和密码初始化都是nacos:

这样就配置好了

nacos的配置管理的功能:

我们可以把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。分为两步:

配置共享:
添加配置共享:

我们先看有那些配置是一个共享抽象的:

spring:
  application:
    name: user-service
  profiles:
    active: dev
  datasource:
    url: jdbc:mysql://ip地址:3307/hm-user?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123
  cloud:
    nacos:
      server-addr: IP地址:8848 # nacos地址
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto
logging:
  level:
    com.hmall: debug
  pattern:
    dateformat: HH:mm:ss:SSS
  file:
    path: "logs/${spring.application.name}"
knife4j:
  enable: true
  openapi:
    title: 黑马商城用户接口文档
    description: "黑马商城用户接口文档"
    email: zhanghuyi@itcast.cn
    concat: 虎哥
    url: https://www.itcast.cn
    version: v1.0.0
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          - com.hmall.userservice.controller

三个部分:

数据库jdbc,日志swagger和openfeign配置

spring:
  datasource:
    url: jdbc:mysql://${hm.db.host:IP地址}:${hm.db.port:3307}/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: ${hm.db.pw}
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto

 只要上面不确定的都可以用占位符,后面再进行读取

日志配置
logging:
  level:
    com.hmall: debug
  pattern:
    dateformat: HH:mm:ss:SSS
  file:
    path: "logs/${spring.application.name}"
knife4j配置
knife4j:
  enable: true
  openapi:
    title: ${hm.swagger.title:黑马商城购物车接口文档}
    description: ${hm.swagger.desc:黑马商城购物车接口文档}
    email: zhanghuyi@itcast.cn
    concat: 虎哥
    url: https://www.itcast.cn
    version: v1.0.0
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          - ${hm.swagger.package}
拉取共享配置:

在拉取之前,我们需要先来明白一下项目启动的流程:

首先之前我们的springboot项目,先加载配置文件,再初始化bean

不过现在是springcloud的项目了,项目整体的启动流程变了

需要先读取bootstrap.yaml文件里面的配置

再去拉取nacos注册中心中的配置,然后才是springboot的项目启动一样

我们由上面的项目启动过程可知,

我们需要一个bootstrap配置文件

再此之前,我们先引入两个依赖:

  <!--nacos配置管理-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>
  <!--读取bootstrap文件-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
  </dependency>
这里其实有个小坑: 

我之前搞这段配置的时候是直接黑马商城这个项目的,里面直接已经配置好了org.springframework.cloud的依赖,但是我oj项目是用springcloud alibaba的脚手架,这里没有帮我们引入这个依赖,直到后面mvn clean的时候才找出问题。

所以我们需要在这个脚手架创建出的项目的父工程中引入一下依赖:

<properties>
        <spring-cloud.version>2021.0.3</spring-cloud.version>
    </properties>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

 在resources目录下新建一个配置文件

spring:
  application:
    name: cart-service # 服务名称
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: IP地址 # nacos地址
      config:
        file-extension: yaml # 文件后缀名
        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享mybatis配置
          - dataId: shared-log.yaml # 共享日志配置
          - dataId: shared-swagger.yaml # 共享日志配置

这里面对应的配置名一定要对上就行

有了这个bootstrap配置文件之后,我们就可以简化application.yamll里面的属性了

server:
  port: 8082
feign:
  okhttp:
    enabled: true # 开启OKHttp连接池支持
hm:
  swagger:
    title: 购物车服务接口文档
    package: com.hmall.cart.controller
  db:
    database: hm-cart

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值