Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取同一服务的多个实例的所有持久化实体_Java_Lagom - Fatal编程技术网

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

Java 如何获取同一服务的多个实例的所有持久化实体,java,lagom,Java,Lagom,我对Lagom框架还很陌生,我正在寻找获取分布式应用程序所有用户的最佳方法 在我的应用程序中,我有一个在Cassandra DB上工作的用户服务。因此,为了选择所有用户,我遵循了UserServiceImpl.java中的Lagom在线拍卖示例应用程序: //... @Override public ServiceCall<NotUsed, PSequence<User>> getUsers() { // Note this should never make p

我对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);
}
//...
/。。。
@凌驾
公共服务调用getUsers(){
//请注意,这不应使生产。。。。
return req->currentIdsQuery.currentPersistenceIds()
.filter(id->id.startsWith(“用户实体”))
.mapsync(4,id->
entityRef(id.substring(10))
.ask(UserCommand.GetUser.INSTANCE))
.filter(可选::isPresent)
.map(可选::get)
.runWith(Sink.seq(),mat)
.thenApply(TreePVector::from);
}
//...
我也检查了这个,所以

很明显,读取端的思想适用于用户服务的一个实例。但是,在生产环境中,同一服务的多个实例可能会在多个节点上运行。在这种情况下,我认为每个服务都应该有自己的数据库

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

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


非常感谢。

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

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


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

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

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


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

谢谢Tim,根据Lagom docs的说法,“如果一个服务的实例需要相互了解,它们必须加入同一个集群”,你说了“如果同一服务有多个实例,它们应该共享一个数据库“。这是否意味着相同服务实例的Cassandra DB必须部署在这些实例的同一集群中,或者可以部署在另一集群中?第一条语句是指Lagom服务形成的。这独立于卡桑德拉集群。如果你问他们是否需要部署到相同的物理服务器,答案是否定的。谢谢Tim,根据Lagom文档,“如果一个服务的实例需要相互了解,它们必须加入同一个集群”,你说“如果你有同一个服务的多个实例,它们应该共享一个数据库”。这是否意味着相同服务实例的Cassandra DB必须部署在这些实例的同一集群中,或者可以部署在另一集群中?第一条语句是指Lagom服务形成的。这独立于卡桑德拉集群。如果您询问是否需要将它们部署到相同的物理服务器,答案是否定的。