如何为同一服务的许多实例获取所有持久化实体

我仍然是Lagom框架的新手,我正在寻找获取分布式应用程序的所有用户的最佳方法 .

在我的应用程序中,我有一个用于Cassandra DB的用户服务 . 因此,要选择我在UserServiceImpl.java中遵循Lagom在线拍卖示例应用程序的所有用户:

//...
@Override
public ServiceCall<NotUsed, PSequence<User>> getUsers() {
    // Note this should never make production....
    return req -> currentIdsQuery.currentPersistenceIds()
            .filter(id -> id.startsWith("UserEntity"))
            .mapAsync(4, id ->
                entityRef(id.substring(10))
                    .ask(UserCommand.GetUser.INSTANCE))
            .filter(Optional::isPresent)
            .map(Optional::get)
            .runWith(Sink.seq(), mat)
            .thenApply(TreePVector::from);
}
//...

我也在SO上检查了这个Question

很明显,读取方的想法适用于一个用户服务实例 . 但是,在 生产环境 环境中,我应该有多个相同服务的实例可以在多个节点上运行 . 在这种情况下,我认为每个服务都应该有自己的DB .

所以我的问题是:读取端逻辑是否只能覆盖每个服务实例的所有用户,还是应涵盖所有服务实例的所有用户?

此外,是否有任何其他解决方案来获取所有服务实例的所有用户?

非常感谢 .

回答(1)

2 years ago

如果您有多个相同服务的实例,则它们应共享一个数据库 .

如果您有多个不同的服务,则每个服务都应该拥有自己的数据库 .

如果您拥有一个服务所拥有的数据,另一个服务必须查询,您可以使用Lagom的Message Broker API将所有事件从拥有服务发布到Kafka . 然后,其他服务可以订阅Kafka主题以将数据复制到它们自己的读取端数据库中 .