我们目前正在研究如何将 Marten 实现为我们的整体应用程序的事件存储。为简单起见,场景范围如下:
一个整体应用程序:
一个微服务具有:
如何确保微服务将从发件箱服务中消费的事件的顺序?众所周知,使用 RabbitMQ 不能保证排序,如果事件以错误的顺序附加到 Marten,事件溯源的整个想法就会失败。
此外,尝试使用事件或将事件附加到 Marten 时可能会出现错误。如何处理这个问题并确保我们不会以错误的顺序将事件附加到 Marten 的事件存储中?另外,当我们尝试消费事件并将其附加到 Marten 时,如何处理错误?我们很可能最终会得到一个无序的事件流。人们如何处理这个问题?
如果我们将发件箱服务与 Marten 事件存储结合起来,那么我们可以将事件附加到流中,而不是使用 RabbitMQ 来发布事件,这将确保排序,因为我们永远不会前进到下一个事件,除非上一个事件已成功附加。这是我们应该用来保证排序的解决方案吗?这感觉不对,会创建一个高度耦合的架构。
非常欢迎任何指导和建议。
在发送端,如果您可以有一个无间隙的序列,您可以按任何顺序发送。在接收端,您可以将它们插入临时表中。并将表中的内容读入 marten。当您遇到间隙时,您会停下来,直到序列中的下一个数字落地。
在发送端,您可以通过将递增序列填充到列中来获得无间隙序列