我正在开发一个 DynamoDB
用作数据库的项目,应用程序的每个用例都由message
在数据库中创建/更新项目后的发布触发。目前代码遵循这种方法:
repository.save(entity);
messagePublisher.publish(event);
Udi Dahan 有一个视频Reliable Messaging Without Distributed Transactions
,他在视频中谈到了系统在保存到 DB 后但在发布消息之前可能会立即失败的情况的解决方案,因为消息不是事务的一部分。但是在他的解决方案中,我认为他假设使用SQL
数据库作为过程涉及保存,作为事务的一部分,正在处理的消息的correlationId,实体修改和要发布的消息。使用NoSQL
数据库我想不出一种干净的方式来存储有关消息的信息。
一种解决方案是使用DynamoDB
streams
并订阅使用一个Lambda
或另一个服务发布的事件,以将它们转换为特定于域的事件。我的问题是我无法从域逻辑发送消息,逻辑将分布在处理消息的服务和Lambda/service
对更改的反应中,并且解决方案将是特定于平台的。
有没有其他方法来处理这个?