正如akka docs所描述的,akka发送的信息是“发射后不管”。但是在ask模式中,如果typekey不存在,我仍然需要等待响应实用程序超时。是否有一种方法可以在向不存在的typekey发送消息时立即失败?
hgb9j2n61#
所谓不存在的类型键,我想你是指一个还没有传递给init的类型键。如果使用类型化分片,可以使用GetShardRegionState(typeKey, _)查询从ClusterSharding(actorSystem).shardState返回的本地ActorRef。如果typekey没有在该节点上初始化,则响应CurrentShardRegionState的shards将为空(注意,由于这依赖于传统的簇分片,因此从技术上讲,这只会验证是否存在初始化的typekey名称)。在经典分片中,可以通过ClusterSharding(actorSystem).shardTypeNames同步获得在节点上已经初始化的typekey名称的集合。注意,通常建议在启动过程中尽早为所有类型键初始化分片,并对启动进行排序,以使依赖于分片的功能在所有类型键都已初始化之前不会启动。例如,可以在簇形成时触发分片初始化(在同一个回调中)开始服务HTTP请求或从消息代理中使用消息。如果一个消息代理运行在Kubernetes中,则可以立即绑定HTTP,但定义了一个准备就绪检查,在分片类型键初始化之前,该检查不会变为绿色:然后,k8s将不会向示例发送HTTP流量,直到分片准备就绪。
init
GetShardRegionState(typeKey, _)
ClusterSharding(actorSystem).shardState
ActorRef
CurrentShardRegionState
shards
ClusterSharding(actorSystem).shardTypeNames
1条答案
按热度按时间hgb9j2n61#
所谓不存在的类型键,我想你是指一个还没有传递给
init
的类型键。如果使用类型化分片,可以使用
GetShardRegionState(typeKey, _)
查询从ClusterSharding(actorSystem).shardState
返回的本地ActorRef
。如果typekey没有在该节点上初始化,则响应CurrentShardRegionState
的shards
将为空(注意,由于这依赖于传统的簇分片,因此从技术上讲,这只会验证是否存在初始化的typekey名称)。在经典分片中,可以通过
ClusterSharding(actorSystem).shardTypeNames
同步获得在节点上已经初始化的typekey名称的集合。注意,通常建议在启动过程中尽早为所有类型键初始化分片,并对启动进行排序,以使依赖于分片的功能在所有类型键都已初始化之前不会启动。例如,可以在簇形成时触发分片初始化(在同一个回调中)开始服务HTTP请求或从消息代理中使用消息。如果一个消息代理运行在Kubernetes中,则可以立即绑定HTTP,但定义了一个准备就绪检查,在分片类型键初始化之前,该检查不会变为绿色:然后,k8s将不会向示例发送HTTP流量,直到分片准备就绪。