鸡拐信息网

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

欢迎来到标题:Java Wildcat

太阳能

Spring Cloud为开发人员提供了一些用于快速构建分布式系统的常用工具,例如分布式配置中心,服务发现和注册,智能路由,服务提升和降级,消息总线,分布式跟踪解决方案等。

此战斗基于单个过程的模拟,结合Spring Cloud Netflix和分布式事务解决方案,在Try Confirm Cancel模式和事件驱动的服务架构中作为实际演示。

发展环境

Docker 1.13.1Docker撰写1.11.1Docker MySQL 5.7.17Docker RabbitMQ 3.6.6Java8与JCESpring Cloud Camden.SR6

系统结构

尝试确认取消补偿模式

此示例遵循Atomikos分布式办公室为微服务提出的RESTful TCC解决方案。

RESTful TCC模式分三个阶段实施

Trying阶段主要针对业务系统检测和资源预留请求。如果保留资源成功,将返回确认资源和到期时间的链接。确认阶段主要确认业务系统的预留资源。 TCC服务提供商需要在确认预留资源的接口上实现幂等性。如果确认成功,则返回204,资源超时将证明已恢复并返回404.取消阶段主要是业务执行错误或预留资源超时后的资源释放操作。取消接口是可选操作,因为它要求TCC服务提供商实现自动恢复功能,因此即使不考虑取消,系统也会自动恢复资源。

基于事件驱动架构的事件驱动架构

在此示例中,order-ms和membership -ms之间的通信是事件驱动的。成功创建订单并且付款成功后,部分订单信息将发送到membership -ms以增加积分。

在系统级别,order-ms属于EDA中的Publisher角色,membership -ms自然是Subscriber。

Publisher中的事件状态转换如下:

NEW-GT; PENDING-GT; DONEW-GT; PENDING-GT; FAILED/NO_ROUTE/NOT_FOUND/ERROR

订阅者中的事件状态转换如下:

新建->;新建->;失败/未找到/错误

一些功能介绍如下:______

发布服务器在发送消息之前会删除该消息,以防止错误地发布该消息(业务数据将回滚,消息将发布到代理)。发布服务器定期扫描新的状态消息并将其发布到代理。强制和发布者确认机制已启用,并且是基本的。将消息持久化到磁盘后将收到ACK。此时,您可以选择将消息转换为“完成”或直接删除它。在将消息发布到代理之后,发布服务器将消息的状态从“新建”更新为“挂起”。挂起状态的事件将被另一个计时器扫描,以便在当前时钟前3秒发布它,但它不获取基本信息。确认事件并将其重新分配给代理。其目的是在单个实例中消除崩溃导致的消息状态丢失的边缘条件。用户消息的等幂性。

基本组件

祖尔网关

在本例中,zuul仅用作路由。配置减少了功能区的读取和连接超时上限。

尤里卡H.A.

多个对等Eureka节点形成了一个高度可用的集群,适当降低了注册列表的自保护阈值。

配置服务器

如果远程配置中存在密文{cipher} *,则密文的解密将被延迟,直到客户端启动。因此,客户端需要配置AES对称密钥encrypt.key,客户端使用的JRE需要安装Java 8 JCE,否则将引发非法的密钥大小相关异常。 (在这种情况下,Docker Compose构建的容器已经安装了JCE。如果远程配置文件不使用{cipher} *,则不需要安装JCE。)为了开箱即用,请使用公共存储库Github或GitOsc。此项目中有两个自定义注释:

威尼斯人网上赌场