如何从事件日志重新发布事件?

时间:2015-03-03 15:01:48

标签: event-sourcing

我看到“重新发布”事件的概念从长期提到的事件到处都有,但它并没有真正详细描述。

我想到的问题如下。某些Producer维护一个事件日志,并将每个事件发布到Queue。消费者连接到队列并接收所有生成的事件。

考虑一个有两个消费者(C1,C2)和一个生产者(P1)的情况。

让我们说:

  1. 生产者P1已启动
  2. 消费者C1连接到队列
  3. P1产生事件E1,E2,E3
  4. C1消耗E1,E2,E3
  5. 消费者C2连接到队列
  6. P1产生E4,E5,E6
  7. C1消耗E4,E5,E6
  8. C2消耗E4,E5,E6
  9. 此时C2已经错过了之前发生的所有事件!怎么做:

    • C2请求重新发布事件E1,E2,E3?
    • C2避免让事件无序(即在获得E1,E2,E3之前获得E4)?

    如果有人有一些见解,非常感谢。

2 个答案:

答案 0 :(得分:0)

这就是我的想法。

将消费者与生产者同步

  1. 消费者记录从外国环境收到的最后一个事件序列号。

    • 将其记录在latest_event_per_context列的聚合表中(这仅适用于一个外部上下文)或
    • 具有聚合表的外键的上下文关系:Table(aggregate_id, context_name, sequence_number),其中序列号是在给定上下文中接收的最新事件。 这在应用层中留下了这个问题。或者
    • 将其记录为事件EventReceived(event, context) - 将其留给域以丢弃重复项
  2. 制片人对其发出的所有事件进行排序。

答案 1 :(得分:0)

结帐https://geteventstore.com/ 连接新订户时,它可以重播流。 GES卸载了管理已经收到的客户的责任。