将事件从发件箱附加到 Marten 并保证排序

问题描述 投票:0回答:1

我们目前正在研究如何将 Marten 实现为我们的整体应用程序的事件存储。为简单起见,场景范围如下:

一个整体应用程序:

  1. 将事件存储在发件箱表中
  2. 使用发件箱服务发布事件(使用 MassTransit 和 RabbitMQ)

一个微服务具有:

  1. Marten 作为活动商店
  2. 将订阅特定事件(从发件箱服务)并将其附加到 Marten(使用 MassTransit 和 RabbitMQ)的消费者

如何确保微服务将从发件箱服务中消费的事件的顺序?众所周知,使用 RabbitMQ 不能保证排序,如果事件以错误的顺序附加到 Marten,事件溯源的整个想法就会失败。

此外,尝试使用事件或将事件附加到 Marten 时可能会出现错误。如何处理这个问题并确保我们不会以错误的顺序将事件附加到 Marten 的事件存储中?另外,当我们尝试消费事件并将其附加到 Marten 时,如何处理错误?我们很可能最终会得到一个无序的事件流。人们如何处理这个问题?

如果我们将发件箱服务与 Marten 事件存储结合起来,那么我们可以将事件附加到流中,而不是使用 RabbitMQ 来发布事件,这将确保排序,因为我们永远不会前进到下一个事件,除非上一个事件已成功附加。这是我们应该用来保证排序的解决方案吗?这感觉不对,会创建一个高度耦合的架构。

非常欢迎任何指导和建议。

rabbitmq event-sourcing marten
1个回答
0
投票

在发送端,如果您可以有一个无间隙的序列,您可以按任何顺序发送。在接收端,您可以将它们插入临时表中。并将表中的内容读入 marten。当您遇到间隙时,您会停下来,直到序列中的下一个数字落地。

在发送端,您可以通过将递增序列填充到列中来获得无间隙序列

© www.soinside.com 2019 - 2024. All rights reserved.