SpringCloud

为什么使用微服务

  1. 大型项目,功能复杂
  2. 用户请求达到一定数量级

单体架构

将业务的所有功能集中在一个项目中开发,打成一个jar包部署运行

优点

  • 架构简单
  • 部署成本低(打成jar包直接运行)

缺点

  • 团队协作成本高(几百号人用一套代码,很容易产生冲突)
  • 系统发布效率低(代码量越多,打包时间越长)
  • 系统可用性差(共用一个Tomcat, 一个接口的高并发会影响其他接口的访问速度)

 

微服务架构

 

 

 

服务拆分原则

  1. 中小厂建议从单体项目做大到微服务
  2. 按业务功能拆分、提取公共服务以便提高复用率

 

服务治理

注册中心

原理:服务调用者和服务提供者之间的桥梁

 

服务多级存储模型

注:优先访问同一集群下的实例,实例权重越大被访问到的概率就越大(权重数值一般是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

注:

  1. 注意数据库配置
  2. Nacos控制台的默认访问地址通常是 http://localhost:8848/nacos   默认登录账号密码为 nacos/nacos

 

服务注册

 

服务发现

实战中,一般通过Feign实现

 

配置中心

配置共享

image


<!-- 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>

image

 

热更新

文件名约定:${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;
}

 

Feign

本质:是一个声明式的http客户端,可以实现http请求的发送

注:Feign 本身并不支持 SpringMVC 的注解,而OpenFeign支持

 

OpenFeign

 

开启连接池

注:默认底层是每次需要重新建立连接(HttpURLConnection),效率较低,所以推荐使用连接池

 

 

SpringCloud Gateway

注:底层基于WebFlux,与web依赖会有冲突

解决gateway与spring-boot-starter-web冲突问题

 

image

 

路由规则配置示例

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/**

 

路由断言工厂

路由过滤器

image

自定义过滤器

全局过滤器 GlobalFilter

作用:对所有路由都生效的过滤器

  

image

 

GatewayFilter

TODO

 

过滤器执行顺序

 

image

 

 

跨域问题

 

系统部署

打包方式

方式一(整体打包)

 

方式二(单个模块打包)

# -pl(--projects): 指定要构建的项目列表
# -am(--also-make): 同时构建这些项目所依赖的模块
mvn clean package -pl ruoyi-gateway -am

 

容器运行

Dockerfile
 #java 版本
FROM openjdk:8
#挂载的docker卷
VOLUME /tmp

# 拷贝 jar 包到容器内
COPY ruoyi-auth.jar ruoyi-auth.jar
# 定义时区参数
ENV TZ=Asia/Shanghai
# 设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
# 配置启动命令
ENTRYPOINT ["java", "-jar", "/ruoyi-auth.jar"]
docker-compose.yml
 version: '3'
services:
  ruoyi-gateway:
    image: ruoyi-gateway:04.24.1
    container_name: ruoyi-gateway
    restart: always
    build:
      context: ./ruoyi-gateway
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
  ruoyi-auth:
    image: ruoyi-auth:04.22.1
    container_name: ruoyi-auth
    restart: always
    build:
      context: ./ruoyi-auth
      dockerfile: Dockerfile
    ports:
      - 9200:9200
    environment:
      TZ: Asia/Shanghai
  ruoyi-system:
    image: ruoyi-system:04.22.1
    container_name: ruoyi-system
    restart: always
    build:
      context: ./ruoyi-system
      dockerfile: Dockerfile
    ports:
      - 9201:9201
    environment:
      TZ: Asia/Shanghai
# 单独启动某一个容器
docker-compose up -d <容器名称>

# 启动所有容器
docker-compose up -d

# 单独停止某一个容器
docker-compose stop <容器名称>

# 停止所有容器
docker-compose down

 

RuoYI-Cloud

数据库配置

 

 

参考文章

【1】课堂笔记  密码:j.N?-+4[

【2】RuoYI-Cloud 数据库初始化配置

【3】使用RouterFunction为应用程序添加一个新的路由

 

posted @ 2024-01-09 22:02  先娶国王后取经  阅读(27)  评论(0)    收藏  举报