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