Akka Persistence Cassandra:timestamp!= offset。或者如何只处理一次事件?

时间:2016-06-14 20:43:52

标签: cassandra akka akka-persistence

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

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

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

所以例如:

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

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

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

修改

CassandraReadJournal提供了getEventsByTag流的重载版本,它返回UUIDEventEnvelopes。它包含UUID而不是Long的偏移量。

1 个答案:

答案 0 :(得分:0)

CassandraReadJournal提供getEventsByTag流的重载版本,返回UUIDEventEnvelopes。其中包含UUID而非Long的偏移量,因此是唯一的。