Akka Persistence Cassandra:时间戳!=偏移量。或者如何只处理一次事件?

Akka Persistence Cassandra: timestamp != offset. Or how to process events only once?

我目前正在使用 Akka Persistence 和 Cassandra Journal 插件构建事件源应用程序。 我有一些视图需要捕获多个持久性 ID 的事件,因此我使用 eventsByTag 查询来更新(例如)我的 mongodb 视图。

如果我重新启动我的应用程序,查询会被重播,所以我需要以某种方式存储视图的状态,这样它就不会重播已经处理过的事件。

起初我打算使用最后处理的事件的偏移量,因为Cassandra 插件内部使用TimeUUID,它应该是唯一的。这里的问题是,Akka Journal 只支持 Long 值作为偏移量,因此 TimeUUID 被转换回正常时间戳。

例如:

2d2504b1-31f8-11e6-af83-9f34c8060f40 和 2d2504b2-31f8-11e6-af83-9f34c8060f40

两者都会产生相同的偏移量,如果我在同一毫秒内有多个事件,那么就确定最后处理的事件而言,这对我来说毫无用处。

有没有人知道如何以更好的方式解决这个问题?

编辑


CassandraReadJournal 提供了 getEventsByTag 流的重载版本,returns UUIDEventEnvelopes。这包含作为 UUID 而不是 Long 的偏移量。

CassandraReadJournal 提供 getEventsByTag 流的重载版本,returns UUIDEventEnvelopes。这包含 UUID 而不是 Long 的偏移量,因此是唯一的。