设计模式-22-责任链模式
责任链模式
责任链模式为请求创建了一个接收者对象的链。
这种模式给予请求的类型,对请求的发送者和接收者进行解耦。它属于行为型模式。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
意图:
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
主要解决:
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
何时使用:
在处理消息的时候以过滤很多道。
如何解决:
拦截的类都实现统一接口。
关键代码:
Handler 里面聚合它自己,在 HandlerRequest 里判断是否合适,如果没达到条件则向下传递,向谁传递之前 set 进去。
优点:
降低耦合度。它将请求的发送者和接收者解耦
简化了对象。使得对象不需要知道链的结构
增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
增加新 ...
3 分布式事务处理 Seata
分布式事务存在问题
单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务保证,但是全局的数据一致性无法保证
用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:
仓储服务:对给定的商品扣除仓储数量。
订单服务:根据采购需求创建订单。
帐户服务:从用户帐户中扣除余额。
Seata简介Seata (Simple Extensible Autonomous Transaction Architecture,简单可扩展自治事务框架) 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
典型的分布式事务过程
分布式事务处理过程的ID+三组件模型
ID
说明
Transaction ID XID
全局唯一的事务ID
术语
说明
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚
TM (Transaction Man ...
2 服务熔断和限流 Sentinel
Sentinel特性
Sentinel分两个部分
核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo/SpringCloud等框架也有较好的支持
控制台(Dashboard)基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器
Sentinel控制台安装步骤
下载地址
运行命令(前提Java8环境;8080端口)
1java -jar sentinel-dashboard-1.8.6.jar
访问sentinel管理界面(账号密码均为sentinel)
初始化监控启动Nacos http://localhost:8848/nacos
1.新建cloudalibaba-sentinel-service-8401
2.引入pom
3.配置yml
4.添加主启动
5.处理业务类
6.测试
启动8401,由于Sentinel采用懒加载
执行一次访问http://localhost:8401/testA和http://localhost:8401/testB
流控规则
资源名:唯一名称,默 ...
1 服务注册和配置中心 Nacos
Nacos简介
Nacos:Dynamic Naming and Configuration Service
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos就是注册中心+配置中心的组合(Eureka+Config+Bus)
快速入门
安装运行成功后访问http://localhost:8848/nacos(默认账号密码为nacos)
Nacos作为服务注册中心服务提供者注册1.新建模块cloudalibaba-provider-payment-9001
2.引入pom
spring-cloud-starter-alibaba-nacos-discovery
spring-boot-starter-web
spring-boot-starter-actuator
spring-boot-starter-test
3.配置yml
12345678910111213141516server: port: 9001spring: application: name: nacos-payment-provider cloud: nacos: ...
9 分布式请求链路追踪 Sleuth
Sleuth 概述在微服务框架中,一个由客户端发起的请求在后端系统中会经过等多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一个复杂的分布式服务调用链路,链路中任何一环出现高延时或错误都会导致整个请求最后失败。SpringCloud Sleuth提供了一套完整的服务跟踪解决方案。在分布式系统中提供追踪解决方案并且兼容支持zipkin
zipkin搭建
下载zipkin
下载zipkin
运行jar
1java -jar zipkin-server-2.12.9.jar
运行控制台
http://localhost:9411/zipkin/
完整的调用链路
表示一请求链路,一条链路通过Trace id唯一标识,Span标识发起的请求信息,各span通过parent id关联起来
精简版
整个链路依赖关系
Trace:类似树结构的Span集合,表示一条调用链路,存在唯一标识
Span:调用链路来源(一次请求信息 )
搭建步骤
1.修改cloud-provider-payment-8001
1234<dependency> < ...
8 消息驱动 Stream
Stream概述
消息驱动
屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型
SpringCloud Stream
SpringCloud Stream是一个构建消息驱动微服务的框架。应用程序通过inputs或者outputs来与SpringCloudStream中binder对象交互。通过配置来binding,而SpringCloudStream的binder对象负责与消息中间件交互。
通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动。SpringCloudStream为一些供应商的消息中间件产品提供个性化的自动配置实现,引用了发布-订阅、消费组、分区三个核心概念。目前仅RabbitMQ和Kafka
设计思想
标准MQ
生产者/消费者之间靠消息媒介传递信息内容(Message)
消息必须走特定的通道(MessageChannel)
消息通道里的消息谁负责发谁负责处理(消息通道MessageChannel的子接口SubscribableChannel,由MessageHandler消息处理器所订阅)
为什么使用CloudStr ...