SpringCloud
单体架构
将业务的所有功能集中在一个项目中开发,打成一个jar包部署运行
优点
- 架构简单
- 部署成本低(打成jar包直接运行)
缺点
- 团队协作成本高(几百号人用一套代码,很容易产生冲突)
- 系统发布效率低(代码量越多,打包时间越长)
- 系统可用性差(共用一个Tomcat, 一个接口的高并发会影响其他接口的访问速度)
微服务架构
Nacos注册中心
原理
服务多级存储模型
注:优先访问同一集群下的实例,实例权重越大被访问到的概率就越大(权重数值一般是0-1)
实例分为临时实例和非临时实例
- 临时实例通过主动上报心跳来告知服务器其当前状态,若心跳停止,则服务器会删除该临时实例;
- 非临时实例则是服务器主动询问其当前状态,即使发现异常也不会删除该非临时实例;
安装Nacos
version: '3'
services:
nacos:
image: nacos/nacos-server:v2.0.4
container_name: nacos
ports:
- 8848:8848
- 9848:9848
- 9849:9849
environment:
TZ: Asia/Shanghai
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: 数据库ip
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_USER: 用户名
MYSQL_SERVICE_PASSWORD: 密码
MYSQL_SERVICE_DB_NAME: nacos
MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
volumes:
- /data/nacos/logs/:/home/nacos/logs
服务注册
注:一般所有服务都是服务提供者
服务发现
实战中,一般通过Feign实现
通过控制台进行相关操作
http://ip:8848/nacos/#/login
Nacos配置中心
<!-- bootstrap 启动器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
默认读取${spring.application.name}-${spring.profiles.active}.${file-extension}
热更新
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "pattern") //只要前缀名和变量名两者拼接与配置配置文件一致,就能完成属性的自动注入
public class PatternProperties {
private String dateformat;
}
相关文件说明
- bootstrap.yml:主要用于Nacos服务注册,便于后续从Nacos拉取相关配置文件
- application.yaml:各微服务之间的一些共享配置,便于统一修改
- application.dev.yaml:各微服务独立的相关配置
Feign
本质:是一个声明式的http客户端,可以实现http请求的发送
注:Feign 本身并不支持 SpringMVC 的注解,OpenFeign支持
OpenFeign
开启连接池
SpringCloudGateway
注:底层基于WebFlux,与web依赖会有冲突
解决gateway与spring-boot-starter-web冲突问题
配置示例
server:
port: 8080
spring:
application:
name: gateway-service
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 118.25.83.109
gateway:
routes:
- id: item # 路由规则id,自定义,唯一
uri: lb://item-service # 路由的目标服务,lb代表负载均衡,会从注册中心拉取服务列表
predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务
- Path=/items/**,/search/** # 这里是以请求路径作为判断规则
- id: cart
uri: lb://cart-service
predicates:
- Path=/carts/**
路由断言工厂
路由过滤器
全局过滤器
本质:自定义过滤器
作用:对所有路由都生效的过滤器
过滤器执行顺序
跨域问题
RuoYI-Cloud
数据库配置
参考文章
【1】课堂笔记 密码:j.N?-+4[
【3】使用RouterFunction为应用程序添加一个新的路由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2023-01-09 pip安装hashlib失败
2023-01-09 python中安装json失败:Could not find a version that satisfies the requirement json (from versions: none)
2023-01-09 NoneBot2聊天机器人自定义聊天内容