架构模式: 事务发件箱

架构模式: 事务发件箱

同时被称作

Application events(系统事件)

上下文

服务命令通常需要更新数据库并发送消息/事件。例如,参与saga的服务需要以原子方式更新数据库并发送消息/事件。同样,发布域事件的服务必须以原子方式更新聚合并发布事件。数据库更新和发送消息必须是原子的,以避免数据不一致和错误。但是,使用跨越数据库和消息代理的分布式事务以原子方式更新数据库并发布消息/事件是不可行的。

问题

如何可靠地/原子地更新数据库并发布消息/事件?

关注点

  • 可以不选择2PC

结论

使用关系数据库的服务将消息/事件作为本地事务的一部分插入到发件箱表(例如MESSAGE)中。使用NoSQL数据库的服务将消息/事件附加到正在更新的记录(例如文档或项目)的属性。单独的Message Relay进程将插入数据库的事件发布到消息代理。

结果上下文

这种模式具有以下好处:

  • 该服务发布高级域事件
  • 可以不选择2PC

这种模式有以下缺点:

  • 由于开发人员可能忘记在更新数据库后发布消息/事件,因此可能容易出错。

此模式还存在以下问题:

  • 消息中继可能会多次发布消息。例如,它可能在发布消息之后但在记录它已经这样做之前崩溃。重新启动时,它将再次发布消息。因此,消息使用者必须是幂等的,可能是通过跟踪它已经处理的消息的ID。幸运的是,由于消息使用者通常需要是幂等的(因为消息代理可以多次传递消息),这通常不是问题。

相关模式

  • Saga和Domain事件模式创造了对这种模式的需求。
  • 事件溯源是另一种解决方案
  • 实现消息中继有两种模式:
    • 事务日志拖尾模式
    • 轮询发布者模式

原文地址:https://www.cnblogs.com/paxlyf/p/11293718.html

时间: 2024-11-09 05:10:33

架构模式: 事务发件箱的相关文章

架构模式: 事务日志跟踪

架构模式: 事务日志跟踪 上下文 你已经采用系统事件发布 问题 如何将消息/事件发布到数据库中的发件箱中以发送给消息代理? 要点 结论 跟踪数据库事务日志并将插入发件箱的每个消息/事件发布到消息代理.   尾随事务日志的机制取决于数据库: MySQL binlog Postgres WAL AWS DynamoDB table streams 结果上下文 这种模式具有以下好处: 不需要2PC 保证准确 这种模式有以下缺点: 虽然变得越来越普遍但相对模糊 需要数据库特定的解决方案 避免重复发布困难

通什翡翠商城大站协议邮件群发系统日发20-30万封不打码不换ip不需发件箱100%进收件箱

用一种新的技术思维去群发邮件 一种不用换IP,不需要任何发件箱的邮件群发方式 一种不需要验证码,不需要**代码变量的邮件群发方式 即使需要验证码也能全自动识别验证码的超级智能软件 教你最核心的邮件群发思维和软件群发技术图片链接不是 问题50%~90%进入收件箱让你不再为进垃圾箱而发愁 每天群发100万封邮件不再是难题 懒人技术升级版大站协议邮件群发 提供的不仅仅是软件更重要的是群发技术 邮件群发神器简介:什么是通什翡翠商城大站协议邮件群发系统? 通什翡翠商城大站协议邮件群发系统,是通过签署邮件群

懒人邮件群发日发50-100万封不打码不换IP不需发件箱大站协议系统营销软件100%进收件箱

用一种新的技术思维去群发邮件 一种不用换IP,不需要任何发件箱的邮件群发方式 一种不需要验证码,不需要**代码变量的邮件群发方式 即使需要验证码也能全自动识别验证码的超级智能软件 教你最核心的邮件群发思维和软件群发技术图片链接不是 问题50%~90%进入收件箱让你不再为进垃圾箱而发愁 每天群发100万封邮件不再是难题 懒人技术升级版大站协议邮件群发 提供的不仅仅是软件更重要的是群发技术 邮件群发神器简介:什么是懒人群发技术大站协议升级版? 懒人群发大站协议升级版,是通过签署邮件群发服务器协议的大

架构模式: 轮询发布者

架构模式: 轮询发布者 上下文 你已经采用事务发件箱模式 问题 如何将消息/事件发布到数据库中的发件箱中以发送给消息代理? 要点 结论 通过轮询数据库的发件箱表来发布消息. 结果上下文 这种模式具有以下好处: 适用于任何SQL数据库 这种模式有以下缺点: 不能保证按顺序发布事件 并非所有NoSQL数据库都支持此模式 关联模式 事务发件箱模式创建了对此模式的需求 事务日志跟踪模式是另一种解决方案 原文地址:https://www.cnblogs.com/paxlyf/p/11293742.html

架构模式: 领域事件

架构模式: 领域事件 来自领域驱动设计(DDD). 上下文 服务通常需要在更新其数据时发布事件.例如,可能需要这些事件来更新CQRS视图.或者,该服务可能参与基于 choreography-based saga编排,并使用事件进行协调. 问题 服务在更新数据时如何发布事件? 解决方案 将服务的业务逻辑组织为DDD聚合的集合,这些聚合在创建或更新时发出域事件.该服务发布这些域事件,以便其他服务可以使用它们. 关联模式 Saga和CQRS模式创造了对这种模式的需求 Aggregate模式用于构建业务

架构模式: Saga

架构模式: Saga 上下文 您已应用每服务数据库模式.每个服务都有自己的数据库.但是,某些业务事务跨越多个服务,因此您需要一种机制来确保服务之间的数据一致性.例如,假设您正在建立一个客户有信用额度的电子商务商店.申请必须确保新订单不会超过客户的信用额度.由于订单和客户位于不同的数据库中,因此应用程序不能简单地使用本地ACID事务. 问题 如何跨服务维护数据一致性? 要点 可以不选择2PC 结论 实现跨越多个服务的每个业务事务作为传奇.传奇是一系列本地交易.每个本地事务都更新数据库并发布消息或事

android 访问SMS短信收件箱

访问 SMS收件箱是另一个常见的需求.首先,需要将读取 SMS 的权限 <uses-permission android:name="android.permission.READ_SMS"/> 添加到描述文件中.添加此权限后就可以读取SMS收件箱中的 短消息了. 要读取 SMS 消息,必须对SMS收件箱执行查询,下面是我们的 代码清单. 布局文件 <?xml version="1.0" encoding="utf-8"?>

Hibernate(1)——数据访问层的架构模式&lt;转&gt;

数据库的概念.逻辑.数据模型概念 应用程序的分层体系结构发展 MVC设计模式与四层结构的对应关系 持久层的设计目标 数据映射器架构模式 JDBC的缺点 Hibernate简介 迅速使用Hibernate开发的例子 Hibernate的核心类和接口,以及他们的关系 POJO和JavaBean的比较 之前的一篇总结文章: 数据库精华知识点总结(1)—数据库的三层模式和二级映像,E-R(实体联系图)图,关系模型 简单来说,就是在软件开发领域,可以用模型表示真实世界的实体.针对数据库就分为: 概念模型(

微服务架构模式简介

转自 http://blog.jobbole.com/96948/ 在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Microservice架构模式设计及搭建一个具有良好扩展性并可持续开发的系统.除此之外,该书还将基于该模式的系统演化流程与Continuous Delivery等当前甚为流行的开发流程结合在了一起,使得Microservice架构模式看起来非常具