我仍然是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。
所以我的问题是:读取端逻辑是否只能覆盖每个服务实例的所有用户,还是应覆盖所有服务实例的所有用户?
此外,还有其他解决办法来获取所有服务实例的所有用户吗?
非常感谢。
答案 0 :(得分:2)
如果您有多个相同服务的实例,他们应该共享一个数据库。
如果您有多个不同的服务,则每个服务都应拥有自己的数据库。
如果您拥有一项服务所拥有的数据,而另一项服务必须查询,您可以使用Lagom的Message Broker API将所有事件从拥有服务发布到Kafka。然后,其他服务可以订阅Kafka主题,将数据复制到自己的读取端数据库中。