cgb第五阶段课堂笔记

文章目录

  • 随堂笔记
  • 笔记乱码问题
  • 课程安排(17到18天)
  • 开发环境
  • 常用地址
  • Spring Cloud Netflix
  • eureka
  • 高可用
  • 04调用02、03
  • Zuul API 网关
  • Hystrix dashboard
  • VMware
  • 离线安装 Docker
  • 配置中心
  • Rabbitmq

随堂笔记

这是随堂笔记, 详细内容请参考在线笔记:
https://blog.csdn.net/weixin_38305440

笔记乱码问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ek7I5eTM-1634803552923)(note.assets/image-20200613174552258.png)]

课程安排(17到18天)

  1. Spring Cloud Netflix(6)
  2. RabbitMQ(2)
  3. 分布式事务(3)
  4. RocketMQ(1)
  5. Docker(2)
  6. Elasticsearch
  7. Kubernetes(3)

王海涛

开发环境

  • IDEA
  • Lombok
  • EditStarters
  • Free MyBatis Plugin
  • Maven Helper
  • Maven
    • 使用阿里仓库和中央仓库,来回切换更新
      • settings.xml 不配置任何镜像仓库,默认使用中央仓库
    • 找到本地仓库的依赖包,删除后重新更新
    • 复制同学的本地仓库中的依赖包
  • 新工程的 Maven 默认配置:
    • File - New Projects Settings - Settings for new projects
  • springboot版本: 2.3.2.RELEASE
  • springcloud版本: Hoxton.SR12

常用地址

提问:

  • 直播聊天
  • 微信: wanght6666666

笔记

http://wanght.blog.csdn.net

https://blog.csdn.net/weixin_38305440/article/details/108609574

随堂笔记

http://code.tarena.com.cn/CGBCode/cgb2106/

Gitee代码仓库

https://gitee.com/benwang6/cgb2106

课前资料,百度网盘:
https://pan.baidu.com/s/19tOuVOYJsplssj3kLvfzcA

Spring Cloud Netflix

  • 注册中心
    • Nacos
    • Eureka
  • 配置中心
    • Nacos
    • Spring Cloud Config
  • 远程调用、负载均衡
    • Feign、Ribbon
  • 系统容错、限流
    • Sentinel
    • Hystrix
  • API网关
    • Spring Cloud Gateway
    • Zuul
  • 数据监控
    • Sentinel
    • Hystrix Dashboard+Turbine
    • 链路跟踪监控:Sleuth+Zipkin

eureka

服务的注册和发现

搭建eureka注册中心服务器

  1. 新建 module: sp05-eureka
  2. 调整pom.xml
    • 父项目
    • 添加 eureka server 依赖
  3. yml
    • 关闭自我保护模式
    • 主机名
    • 针对单台服务器,不向自己注册,不从自己拉取
  4. 启动类注解:@EnableEurekaServer 触发 eureka 服务器的自动配置

eureka四条运行机制

  1. 客户端启动时,会反复连接注册中心尝试注册,直到注册成功为止
  2. 客户端每30秒发送一次心跳数据,服务器连续3次收不到一个服务的心跳,会删除它的注册信息
  3. 客户端每30秒拉取一次注册表,刷新本地注册表缓存
  4. 自我保护模式
    • 由于网络中断,15分钟内,85%服务器出现心跳异常,自动进入保护模式,
      自我保护模式下所有的注册信息都不删除
    • 网络恢复后,自动退出保护模式
    • 开发调试期间,可以关闭保护模式,避免影响调试

客户端连接 eureka 注册中心

修改 2,3,4 项目

  1. 添加 eureka client 依赖

  2. yml

    eureka连接地址: http://eureka1:2001/eureka

高可用

02商品服务

  1. 右键点击02的启动配置
    或者点上面的启动配置下拉菜单
    选择 “Edit Configuration”
  2. 对02创建两个启动配置,设置启动参数--server.port=xxxx

05eureka注册中心

04调用02、03

  1. 在 04 的 pom.xml 添加依赖: openfeign
  2. 启动类添加注解:@EnableFeignClients 触发Feign的自动配置
  3. 定义远程调用接口:
    • ItemClient
    • UserClient
  4. OrderServiceImpl,实现远程调用

Feign 集成 Ribbon 负载均衡和重试

  • Feign集成Ribbon,默认实现了负载均衡和重试

Ribbon的重试

远程调用失败,可以自动发起重试调用

  • 异常
  • 服务器宕机
  • 后台服务阻塞超时

重试参数:

  • MaxAutoRetries - 单台服务器的重试次数,模式0
  • MaxAutoRetriesNextServer - 更换服务器的次数,默认1
  • ReadTimeout - 等待响应的超时时间,默认1000
  • OkToRetryOnAllOperations - 是否对所有类型请求都重试,默认只对GET请求重试
  • ConnectTimeout - 与后台服务器建立连接的等待超时时间,默认1000

Zuul API 网关

  1. 统一的访问入口
  2. 统一的权限校验
  3. 集成 Ribbon 负载均衡和重试
  4. 集成 Hystrix 容错和限流

统一的访问入口

  1. 新建模块: sp06-zuul

  2. 添加依赖:

    • eureka client
    • zuul
    • sp01
  3. yml 配置路由转发规则

    #  **包含深层路径
    #  * 只包含一层路径
    
    # 服务id设置成访问子路径,是默认规则,
    # zuul根据注册表的注册信息完成自动配置
    # 最好手动配置,防止注册表不全
    zuul:
      routes:
        item-service: /item-service/**
        user-service: /user-service/**
        order-service: /order-service/**
    
  4. 启动类添加注解 @EnableZuulProxy

zuul统一权限校验

http://localhost:3001/item-service/t45t4 没有登录不能访问

http://localhost:3001/item-service/t45t4?token=65345rt 已经登录过,可以访问

  1. 新建 ZuulFilter 子类
  2. 按 zuul 的规则实现
  3. 添加 @Component 注解

zuul 的自动配置类可以在 spring 容器中自动发现过滤器实例,完成自动配置

zuul集成Ribbon

  • 默认启用了负载均衡

  • 默认没有启用重试

    • 在入口位置进行重试,会造成后台大面积服务压力翻倍,可能造成故障传播、雪崩
  • zuul启用重试(不推荐)

    1. 添加 spring-retry 依赖
    2. yml配置 zuul.retryable=true
    3. 配置重试参数(可选)

zuul集成 Hystrix

Hystrix是容错和限流工具

  • 容错 – 降级

    调用后台服务出错(异常,阻塞,服务崩溃),可以执行当前服务的一段代码,直接向客户端返回降级结果

    • 错误提示
    • 缓存的结果
    • 根据业务逻辑,返回任意的结果
  • 添加 Hystrix 降级

    1. Zuul默认已经启用 Hystrix
    2. 实现 FallbackProvider 接口,按zuul的规则实现接口的方法
    3. 添加 @Component
  • Hystrix 限流 - 熔断

    • 当流量过大,造成后台服务故障,可以断开链路,限制后台服务的访问流量,等待后台服务恢复
    • 断路器打开的条件
      • 10秒20次请求(必须首先满足)
      • 50%出错,执行降级代码
    • 半开状态
      • 断路器打开一段时间后,会进入半开状态
      • 会尝试发送一次客户端调用,
        • 成功,关闭断路器,恢复正常
        • 失败,继续保持打开状态

Hystrix dashboard

Hystrix数据监控仪表盘

Hystrix日志,是通过 Actuator 工具来暴露出来

Actuator

springboot 提供的一个项目指标工具,可以通过Actuator获取项目的各种日志数据

  • 健康状态

  • spring容器中所有的对象

  • spring mvc映射的所有路径

  • jvm堆内存镜像

  • 添加 Actuator

    1. 添加 actuator 依赖

    2. 暴露监控日志

      m.e.w.e.i= "*"  暴露所有日志
      m.e.w.e.i= health  暴露健康状态日志
      m.e.w.e.i= health,beans,mappings,hystrix.stream  暴露多种日志
      
    3. 查看日志

      http://localhost:3001/actuator

搭建 Hystrix dashboard

  1. 新建模块: sp07-hystrix-dashboard

  2. 添加依赖: Hystrix dashboard

  3. yml配置

    允许抓取的服务器列表: localhost
    
  4. 启动类添加注解: @EnableHystrixDashboard

  5. 访问 http://localhost:4001/hystrix

Turbine

聚合多台服务器的日志数据,提供给仪表盘显示

  1. 新建模块: sp08-turbine

  2. 添加依赖

    • eureka client
    • turbine
  3. yml

    聚合的服务: zuul
    为聚合的日志数据命名:new String("default")
    
  4. 启动类注解:@EnableTurbine

合并的日志地址: http://localhost:5001/turbine.stream

VMware

  • VMware 版本: 16+

  • NAT网络网段使用 64 网段

    • 编辑 – 虚拟网络编辑器 – 选择 vmnet8 – 左下角修改:192.168.64.0
  • 虚拟机镜像

    • 课前资料\虚拟机\
      • centos-7-1908.zip
      • centos-8-2105.zip
    • 已经做了几步基础设置:
      • yum源和扩展源,使用阿里镜像
      • 安装了工具: python、pip、ansible
      • 方便设置ip地址的脚本:
        • ip-static 设置固定ip
        • ip-dhcp 自动获取ip
  • 加载虚拟机

    1. 解压缩 centos-8-2105.zip
    2. 双击 centos-8-2105.vmx 加载镜像
    3. 启动虚拟机,按提示选择“已复制虚拟机”
    4. 用户名密码都是 root

网卡不可用

# centos 7 禁用 NetworkManager 系统服务
systemctl stop NetworkManager
systemctl disable NetworkManager

# centos 8 开启 VMware 托管
nmcli n on
systemctl restart NetworkManager

# 还原 VMware 虚拟网络
# VMware 虚拟网络不稳定,经常出现故障

# 编辑 -- 虚拟网络编辑器 -- 左下角按钮“还原默认设置” -- 设置 VMnet8 的 64 网段

# 会删除所有虚拟网络,重新创建

离线安装 Docker

  1. 上传离线文件到 /root/

    • \DevOps课前资料\docker\docker-install 文件夹
  2. 参考笔记,从第三步开始安装

    https://wanght.blog.csdn.net/article/details/117327543

配置中心

准备 Git 仓库

把 2,3,4 三个项目的配置文件,存放到git仓库

  1. 在 springcloud1 下新建文件夹: config
  2. 把 2,3,4 三个项目的配置文件,复制到 config 目录
    • item-service-dev.yml
    • user-service-dev.yml
    • order-service-dev.yml
  3. 添加 override-none=true 防止配置中心的配置,覆盖本地命令参数
  4. (有仓库的同学不用重复创建)
    1. VCS – create git repository
      或 double shift,搜索 create git repository
    2. 选择 springcloud1 工程目录作为仓库目录
    3. commit 提交本地仓库,ctrl+k,右上角对勾按钮,double shift搜索commit
    4. 选择所有文件,填写提交信息,提交
  5. (有仓库的同学不用重复创建)
    在 gitee 点右上角加号新建仓库
    • 仓库名称: springcloud1
    • 设置开源项
  6. ctrl+shift+k,右上角向上箭头按钮,double shift搜索push
  7. push界面,点击 define remore 连接,填写远程仓库地址,完成推送

搭建配置中心服务器

  1. 新建模块: sp09-config

  2. 添加依赖

    • eureka client
    • config server
  3. yml

    • 仓库的地址

    • 存放配置文件的文件夹路径

    • 之后测试如果有问题,果断换仓库

      https://gitee.com/xyxyxyxyx/springcolud01
      
      config
      
  4. 启动类注解: @EnalbleConfigServer

确认配置中心服务器是否正确

  1. http://eureka1:2001/ 检查是否有 config-server 的注册信息
  2. 访问配置中心的配置文件
    • http://localhost:6001/item-service/dev
    • http://localhost:6001/user-service/dev
    • http://localhost:6001/order-service/dev

配置中心的客户端

  1. 把 2,3,4 的配置文件全部注释掉
  2. 添加依赖: config client
  3. 新建配置文件: bootstrap.yml
  4. 添加配置:
    • eureka地址
    • 指定配置中心的服务id:CONFIG-SERVER
    • 指定下载的配置文件和 profile

确认

  • 启动控制台中,要看到连接 6001 的日志

Rabbitmq

消息队列、消息服务、消息中间件、Broker

  • Rabbitmq
  • Activemq
  • Rocketmq 阿里
  • Kafka
  • Tubemq 腾讯

搭建Rabbitmq服务器

  1. 克隆 docker-base: rabbitmq

  2. 设置ip

    ./ip-static
    ip: 192.168.64.140
    
    ifconfig
    
  3. 下载 rabbitmq 镜像

    docker pull rabbitmq:management
    
    或者从 code 下载 rabbit-image.gz
    上传到服务器,然后执行镜像导入
    docker load -i rabbit-image.gz
    
  4. 准备配置文件,配置管理员用户名和密码

  5. 启动rabbitmq容器

关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
 
重启 docker 系统服务
systemctl restart docker

mkdir /etc/rabbitmq
vim /etc/rabbitmq/rabbitmq.conf

# 添加两行配置:
default_user = admin
default_pass = admin

docker run -d --name rabbit \
-p 5672:5672 \
-p 15672:15672 \
-v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-e RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf \
rabbitmq:management

访问管理控制台 http://192.168.64.140:15672
用户名密码是 admin

上传到服务器,然后执行镜像导入
docker load -i rabbit-image.gz


4. 准备配置文件,配置管理员用户名和密码

5. 启动rabbitmq容器

```shell
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

重启 docker 系统服务
systemctl restart docker

mkdir /etc/rabbitmq
vim /etc/rabbitmq/rabbitmq.conf

# 添加两行配置:
default_user = admin
default_pass = admin

docker run -d --name rabbit \
-p 5672:5672 \
-p 15672:15672 \
-v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-e RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf \
rabbitmq:management

访问管理控制台 http://192.168.64.140:15672
用户名密码是 admin

你可能感兴趣的:(笔记,java,开发语言,后端)