Scala 如何检查群集分片是否正确启动?

Scala 如何检查群集分片是否正确启动?,scala,cluster-computing,akka,sharding,akka-cluster,Scala,Cluster Computing,Akka,Sharding,Akka Cluster,我想检查ClusterSharding是否在非某个区域启动。代码如下: def someMethod: { val system = ActorSystem("ClusterSystem", ConfigFactory.load()) val region: ActorRef = ClusterSharding(system).shardRegion("someActorName") } 方法akka.contrib.pattern.ClusterSharding#shardR

我想检查ClusterSharding是否在非某个区域启动。代码如下:

def someMethod: {
    val system = ActorSystem("ClusterSystem", ConfigFactory.load())
    val region: ActorRef = ClusterSharding(system).shardRegion("someActorName")
}
方法
akka.contrib.pattern.ClusterSharding#shardRegion
如果未找到shardRegion,则抛出
illegargumentexception
。我不喜欢只为了检查ClusterSharding是否未启动而捕获
IllegalArgumentException
的方法

是否还有其他方法,如ClusterSharding(system.isStarted)(shardRegionName=“someActorName”)?
或者假设我应该在ActorSystem启动时启动所有shardingRegion?

您确实应该尽快启动所有区域。根据报告:

使用分片扩展时,通常在集群中每个节点的系统启动时,您首先应该使用ClusterSharding.start方法注册受支持的条目类型

区域的启动不是立即的。特别是,即使在本地情况下,在分片参与者能够有效接收消息之前,至少需要配置的akka.contrib.cluster.sharding.retry-interval(名称有误导性:该值是注册的初始延迟和重试间隔)参数中指定的时间(在此期间发送的消息不会丢失,但在一段时间后才会发送)


如果您希望100%确定您的区域已启动,您应该让您的一个分片参与者在调用cluster.start后响应消息。一旦它响应,您就可以保证您的区域已启动并运行。如果您希望阻止并等待ask future,您可以使用一种模式。

您是否尝试为其调用start方法shardRegion之前的“someActorName”(scaladoc:“检索负责命名条目类型的shardRegion参与者的参与者引用。条目类型必须在#start方法中注册,才能在此处使用。”)?我需要检查是否调用了
start
方法。不要先调用它。但是在没有ActorSystem的情况下,您如何调用start方法(我在您的示例中看到它是私有的)?您能否关闭此对话框并通过选择一个答案将其标记为已解决,如果您满意的话?@Cherry您找到解决方案而不是异常检查?