我目前正在使用 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 流的重载版本,它返回 UUIDEventEnvelopes 。这包含作为 UUID 而不是 Long 的偏移量。