akka 在集群分片中,如何检测分片键的存在?

bvuwiixz  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(150)

正如akka docs所描述的,akka发送的信息是“发射后不管”。
但是在ask模式中,如果typekey不存在,我仍然需要等待响应实用程序超时。
是否有一种方法可以在向不存在的typekey发送消息时立即失败?

hgb9j2n6

hgb9j2n61#

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

相关问题