SpringCloud微服务

开发环境
IDEA

Lombok

EditStarters

Free MyBatis Plugin

Maven Helper

Maven

使用阿里仓库和中央仓库,来回切换更新
settings.xml 不配置任何镜像仓库,默认使用中央仓库

D:\home\java\maven_repository

<mirrors>

	<!--<mirror>-->
	<!--	<id>alimaven</id>-->
	<!--	<name>aliyun maven</name>-->
	<!--	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>-->
	<!--	<mirrorOf>central</mirrorOf>-->
	<!--</mirror>-->

	<!--<mirror>-->
	<!--	<id>huaweicloud</id>-->
	<!--	<mirrorOf>*</mirrorOf>-->
	<!--	<url>https://mirrors.huaweicloud.com/repository/maven/</url>-->
	<!--</mirror>-->

</mirrors>
找到本地仓库的依赖包,删除后重新更新 复制同学的本地仓库中的依赖包 新工程的 Maven 默认配置:

File - New Projects Settings - Settings for new projects
springboot版本: 2.3.2.RELEASE

springcloud版本: Hoxton.SR12

常用地址
提问:

直播聊天
微信: wanght6666666
笔记

http://wanght.blog.youkuaiyun.com

https://blog.youkuaiyun.com/weixin_38305440/article/details/108609574

随堂笔记

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

http://218.247.142.198/CGBCode/cgb2108/

tarenacode

code_2013

Gitee代码仓库

https://gitee.com/benwang6/cgb2108

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

Spring Cloud Netflix
注册中心
Nacos
Eureka
配置中心
Nacos
Spring Cloud Config / BUS
远程调用、负载均衡
Feign、Ribbon
系统容错、限流
Sentinel
Hystrix
API网关
Spring Cloud Gateway
Zuul
数据监控
Sentinel
Hystrix Dashboard+Turbine
链路跟踪监控:Sleuth+Zipkin
订单业务案例
父项目
commons
业务模块
新建 spring 模块
pom.xml
application.yml
service
controller
Eureka 注册中心
服务的注册和发现

常见的注册中心工具:

Nacos
Eureka
Zookeeper
Consul
Etcd

搭建Eureka注册中心服务

新建 spring 模块: sp05-eureka
修改 pom.xml,添加 eureka server
yml
禁用自我保护模式
主机名:eureka1
针对单台服务器,不向自己注册,不从自己拉取注册表
启动类注解:@EnableEurekaServer 触发eureka server的自动配置
Eureka的四条运行机制

注册

客户端一次次的反复连接注册中心进行注册,直到注册成功为止

拉取

客户端每30秒拉取一次注册表,刷新注册表

心跳

客户端每30秒发送一次心跳数据,如果服务器端连续三次收不到一个服务的心跳,会删除它的注册信息

自我保护模式

由于网络故障,15分钟内,85%服务器出现心跳异常,会自动进入自我保护模式
保护所有注册信息不删除
等待网络恢复后,可以退出保护模式,恢复正常
开发调试期间应该关闭保护模式,避免影响测试
Eureka客户端

修改 hosts 文件 win+r,输入 drivers,进入 etc 目录找到 hosts 文件

127.0.0.1 eureka1
127.0.0.1 eureka2
修改 2,3,4 三个模块,添加 eureka client 依赖

修改 2,3,4 的 yml 配置,添加 eureka 的连接地址

商品和eureka的高可用
02商品高可用

通过 springboot 的启动参数 --server.port设置商品的启动端口

运行的下拉菜单中,选择 edit configuration
找到商品的启动配置
修改两个位置
启动配置名称: Sp02-item-8001、Sp02-item-8002
配置启动参数 program arguments:
–server.port=8001
–server.port=8002
Eureka高可用

添加 eureka1 和 eureka2 的 profile 配置

配置两个启动配置

Sp05Eureka-2001,添加启动参数:–spring.profiles.active=eureka1
Sp05Eureka-2001,添加启动参数:–spring.profiles.active=eureka2
修改 2,3,4,连接两台 eureka 服务器

订单远程调用商品和用户
04项目添加 feign 依赖
启动类添加注解:@EnableFeignClients
添加两个远程调用接口
ItemClient
UserClient
OrderServiceImpl 中实现远程调用
Feign 集成 Ribbon

负载均衡 – 默认启用了负载均衡
重试 – 默认启用了重试
Ribbon 重试

调用后台服务失败(异常、服务器崩溃、超时),可以自动发起重试调用

重试参数:

ribbon.MaxAutoRetries - 单台服务器的重试次数,默认0
ribbon.MaxAutoRetriesNextServer - 更换服务器的次数,默认1
ribbon.ReadTimeout - 接收响应的超时时间,默认1000
ribbon.ConnectTimeout - 与后台服务器建立连接等待超时时间,默认1000
ribbon.OkToRetryOnAllOperations - 是否对所有类型请求都进行重试,默认只对 GET 请求重试
Zuul - API网关
统一的调用入口
统一的权限校验
集成 Ribbon
集成 Hystrix
统一的调用入口

新建 spring 模块: sp06-zuul

pom.xml 添加依赖: zuul、eureka client

yml 配置路由规则

下面的路由规则是默认配置

根据注册表,可以完成自动配置

最好自己手动配置,防止注册表不全

zuul:
routes:
# ** 包含深层子路径
# * 只包含单层路径
item-service: /item-service/**
user-service: /user-service/**
order-service: /order-service/**
启动类添加注解:@EnableZuulProxy

Zuul 统一权限校验

继承 Zuul 的过滤器,在过滤器中判断用户权限

添加商品访问的权限判断:

http://localhost:3001/item-service/yt3r23rt34 没有登录不允许访问
http://localhost:3001/item-service/yt3r23rt34?token=uy4t3 已经登录可以访问
新建过滤器类:AccessFilter,继承 ZuulFilter
按照规则实现过滤器
添加注解:@Component
zuul的自动配置,会从 spring 容器自动发现过滤器实例,完成自动配置
Zuul 集成 Ribbon

默认已经启动 ribbon 的负载均衡
默认不启用 ribbon 的重试
在网关重试,可能造成后台服务大面积出现压力翻倍
重试功能应该尽量往后放
启用重试
添加 spring-retry 依赖
yml配置启用重试: zuul.retryable=true
zuul集成Hystrix

zuul默认已经启用了Hystrix
添加降级
添加降级类,实现 FallbackProvider 接口
添加 @Component
zuul的自动配置会从spring容器自动发现降级类的实例,完成自动配置
Hystrix
容错和限流工具

容错 – 通过降级来容错
调用后台服务失败,执行当前模块的一段降级代码,返回降级结果
错误提示
缓存数据
根据具体业务逻辑,返回任何结果都可以
限流 – 通过熔断来限制后台服务的流量
流量过大时,后台服务出现大量错误,会自动触发熔断
10秒20次请求(必须首先满足)
50%出错,执行了降级
半开状态
断路器打开后一段时间,会进入半开状态
会尝试发送一次客户端调用 调用成功,关闭断路器,恢复正常链路 调用失败,继续保持打开状态
Hystrix数据监控

Hystrix利用 springboot 的 Actuator 工具来暴露自己的监控数据

搭建 Hystrix Dashboard

新建 spring 模块:sp07-hystrix-dashboard
配置 pom.xml,添加 hystrix dashboard
yml 配置允许抓取的服务器列表
启动类添加注解:@EnableHystrixDashboard
访问路径: http://localhost:4001/hystrix

Actuator

springboot提供的项目监控指标工具,提供了多种监控数据

健康状态
环境变量、配置参数
spring mvc 的映射路径
JVM 虚拟机堆内存镜像
spring 容器中所有的对象

添加 actuator

添加 actuator 依赖

yml配置暴露的监控数据

m.e.w.e.i="*" 暴露所有监控数据

m.e.w.e.i=health, env, beans, mappings

m.e.w.e.i=hystris.stream
访问 http://localhost:3001/actuator

Turbine
从多台服务器抓取 Hystrix 日志,进行聚合,

Hystrix dashboard从Turbine抓取聚合后的日志数据

新建 spring 模块: sp08-turbine

pom.xml,添加 turbine、eureka client

yml

聚合的服务列表:zuul,a,b,c
对聚合的日志数据命名:new String(“default”)
启动类注解:@EnableTurbine

访问 http://localhost:5001/turbine.stream

Spring cloud config 配置中心
集中的管理和维护配置文件

创建远程仓库

在 gitee 中,右上角点加号新建仓库
仓库名: springcloud1
设置成开源项目
创建本地仓库

vcs – create git repository

也可以 double shift 在 action 中搜索 create git repository

选择 springcloud1 工程文件夹作为本地仓库目录

ctrl+k 向本地仓库提交文件 或者点右上角的对勾按钮 或者可以 double shift 在 action 中搜索 commit

选中全部文件、填写提交信息,执行提交

把本地仓库推送到远程仓库

ctrl+shift+k 执行推送 或者点右上角的向上箭头按钮 或者可以 double shift 在 action 中搜索 push
点左上角链接 define remote
粘贴远程仓库 springcloud1 的地址
三个业务模块的配置文件,放到 git 仓库

在 springcloud1 工程中新建文件夹:config
复制 2,3,4 的 application.yml 到 config 目录
item-service-dev.yml
user-service-dev.yml
order-service-dev.yml
三个文件中添加 override-none: true 防止下载的配置,覆盖本地参数设置
提交到本地仓库
向远程仓库推送
搭建配置中心

新建 sp09-config 模块

添加 config server 、eureka client 依赖

yml配置

git 仓库地址
仓库中存放配置文件的文件夹路径
启动类注解:@EnalbeConfigServer

启动 05、09,检查确认

#注册表中有 config-server
http://eureka1:2001/

http://localhost:6001/item-service/dev # item-service-dev.yml
http://localhost:6001/user-service/dev
http://localhost:6001/order-service/dev
配置中心的客户端

修改 2,3,4 的 application.yml,代码全部注释
修改 03 用户,添加配置中心客户端设置
添加 config client 依赖
新建 bootstrap.yml (在引导配置阶段,从配置中心下载 application.yml)
添加三条配置:
连接 eureka
指定配置中心的服务id
从配置中心下载 user-service-dev.yml
VMware
16+

Nat 网络网段

使用 192.168.64.0 网段

编辑 – 虚拟网络编辑器 – 上面选择 vmnet8 – 左下角修改网段 64

加载虚拟机镜像

课前资料/虚拟机/centos-8-2105.zip
课前资料/虚拟机/centos-7-1908.zip
能用centos-8就用centos-8,用不了的话可以换成7
两个虚拟机中已经做了几步基础配置:
阿里的yum安装源和扩展安装源
安装了三个工具: python、pip、ansible
两个脚本文件,用来设置ip地址
ip-static:用来设置固定ip
ip-dhcp:用来设置自动获取ip
解压 centos-8-2105.zip
双击 centos-8-2105.vmx,加载虚拟机
启动虚拟机,按提示选择 “已复制虚拟机”
登录的用户名密码,都是 root
测试虚拟机和宿主机之间网络是否互通

./ip-dhcp

ping 宿主机在 nat 网络中的地址

宿主机 ping 不通,可能需要关闭windows防火墙

ping 192.168.64.1

在 windows 的cmd窗口中 ping 虚拟机

ping 192.168.64.128
解决网络设置问题

centos 7 禁用 NetworkManager 系统服务

systemctl stop NetworkManager
systemctl disable NetworkManager

centos 8 开启 VMware 托管

nmcli n on
systemctl restart NetworkManager

如果还有问题,可以重置 VMware 虚拟网络

编辑 – 虚拟网络编辑器 – 还原默认设置
然后再设置 nat 网络网段 64
安装 Docker 虚拟机
关闭 centos-8-2105
克隆 centos-8-2105: docker-base
用 mobaxterm 工具上传文件到 /root/
课前资料\DevOps课前资料\docker\docker-install 文件夹
参考 Docker离线安装笔记,从第3步开始执行(前两步下载文件不用执行)
Rabbitmq 消息中间件
在分布式系统中,用来在模块之间传递数据的工具

消息服务在分布式系统中,是非常重要的组件

常用的消息服务器:

Rabbitmq
Activemq
Kafka
Rocketmq
Tubemq

搭建 Rabbitmq 服务器

准备好docker环境

从 docker base 克隆: rabbitmq

设置ip地址

./ip-static
ip: 192.168.64.140

ifconfig #如果有问题,参考 VMware 下面的 解决网络设置问题
上传镜像压缩文件到/root/

DevOps课前资料\docker\rabbit-image.gz
执行导入 docker load -i rabbit-image.gz

按照 csdn rabbitmq 笔记,docker 运行 rabbitmq

Rabbitmq 原生API测试

新建 Empty project: rabbitmq
新建 maven 模块: rabbitmq-api
添加 rabbitmq 依赖

配置中心 + Bus 配置刷新

Bus - 消息总线

辅助完成配置刷新,向消息服务器发送刷新指令,从消息服务器接收指令,执行刷新操作
在这里插入图片描述
修改 2,3,4,9 添加 Bus 和 Rabbitmq

添加依赖
1.Bus

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>

2.Rabbitmq

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

3.binder rabbit

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

4.yml 配置rabbitmq 连接

rabbitmq:
    host: 192.168.64.140
    port: 5672
    username: admin
    password: admin
    virtual-host: wht #自己的空间名,需要在服务器上手动创建

5.09的 application.yml

rabbitmq:
    host: 192.168.64.140
    port: 5672
    username: admin
    password: admin
    virtual-host: wht #自己的空间名,需要在服务器上手动创建

6.2,3,4 修改 config 文件夹的三个文件,提交推送到远程仓库

在这里插spring:
  application:
    name: item-service
  cloud:
    config:
      override-none: true
  zipkin:
    sender:
      type: rabbit

  rabbitmq:
    host: 192.168.64.140
    port: 5672
    username: admin
    password: admin
    virtual-host: wht #自己的空间名,需要在服务器上手动创建

server:
  port: 8001

eureka:
  client:
    service-url:
       #注册到注册中心的地址,把此服务注册到注册中心,便于服务的发现
      defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka

ribbon:
  #默认值
  MaxAutoRetries: 0  #单台服务器不重试  当服务出现宕机重试几次,
  MaxAutoRetriesNextServer: 1    #更换1次服务器  如果还是不能调用成功,报错
  #OkToRetryOnAllOperations: true   #请求方式   默认false,get请求  true,

入代码片

7.09项目,用actuator暴露 bus-refresh 路径
8.actuator依赖.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

9.yml配置: m.e.w.e.i=bus-refresh

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

启动项目
05,等待完全启动
09,等待完全启动
查看注册表要有 config-server
在这里插入图片描述
http://localhost:6001/user-service/dev :通过配置中config获取user、order、item.yml信息是否正常
在这里插入图片描述
http://localhost:6001/actuator/ 查看这里有没有 bus-refresh。通过post请求进行刷新
在这里插入图片描述
2,3,等待完全启动
4,等待完全启动,检查控制台有没有连接 6001
6,等待完全启动
POST http://localhost:6001/actuator/bus-refresh
可以指定具体服务刷新:POST http://localhost:6001/actuator/bus-refresh/user-service
查看 2,3,4 控制台,有没有重新连接6001刷新配置
在这里插入图片描述
消息服务案例
config+bus配置刷新 把刷新指令发送到rabbitmq,其他模块接收指令执行刷新操作 主题模式
Sleuth + zipkin 链路跟踪
Sleuth 用来产生链路跟踪日志
A -> B -> C -> D

服务名,链路id,当前模块id,是否发送到zipkin(10%抽样比例)

A, UYT43TRF45Y, UYT43TRF45Y, true
B, UYT43TRF45Y, IUYT34T4Y56, true
C, UYT43TRF45Y, I656Y45T344, true
D, UYT43TRF45Y, I6456Y32T44, true
添加Sleuth
在这里插入图片描述

修改 2,3,4,6 添加 sleuth 依赖
sleuth 自动配置,0配置

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>

2,3,4,6中的链路跟踪日志,发送到rabbitmq,再向zipkin中转发送
在这里插入图片描述

在 2,3,4,6 中添加依赖:zipkin client

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

在 06 添加 rabbitmq 的依赖和连接配置

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

修改 06 的 application.yml

rabbitmq:
    host: 192.168.64.140
    port: 5672
    username: admin
    password: admin
    virtual-host: wht #自己的空间名,需要在服务器上手动创建

日志发送方式: rabbit
在 config 文件夹修改 2,3,4 ,6,添加发送方式,提交推送到远程仓库

zipkin:
    sender:
      type: rabbit  

下载 zipkin 服务器

https://github.com/openzipkin/zipkin

在这里插入图片描述

进入下载目录cmd启动 zipkin 时,连接到 rabbitmq

java -jar zipkin-server-2.23.15-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672

访问端口:http://localhost:9411/zipkin

访问链接:http://localhost:3001/order-service/7
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值