Akka Cluster-Sharding, bir kullanım durumu ile iyi uyuşuyor gibi görünüyor Akka düğümleri boyunca tek bir durum halindeki kalıcı aktörler oluşturmak zorundayım.Akka cluster-sharding: Can Entry aktörleri dinamik sahne var
Bunu oluşturmak için argüman gerektiren bir Giriş aktör türüne sahip olmanızın mümkün olup olmadığı net değil. Ya da Giriş aktörünün bu bilgiyi nasıl aldığını yeniden gözden geçirmem gerekebilir. ClusterSharding.start
Oysa
Object Account {
def apply(region: String, accountId: String): Props = Props(new Account(region, accountId))
}
class Account(val region: String, val accountId: String) extends Actor with PersistentActor { ... }
tüm kayıt aktörleri oluşturmak için tek bir aksesuvar örneği alır.
akka cluster-sharding itibaren:
val counterRegion: ActorRef = ClusterSharding(system).start(
typeName = "Counter",
entryProps = Some(Props[Counter]),
idExtractor = idExtractor,
shardResolver = shardResolver)
Ve o zaman idExtractor nasıl tanımladığına dayalı mesajı alır giriş aktör giderir.
def getEntry(id: EntryId): ActorRef = {
val name = URLEncoder.encode(id, "utf-8")
context.child(name).getOrElse {
log.debug("Starting entry [{}] in shard [{}]", id, shardId)
val a = context.watch(context.actorOf(entryProps, name))
idByRef = idByRef.updated(a, id)
refById = refById.updated(id, a)
state = state.copy(state.entries + id)
a
}
}
Ben bunun yerine bölge dışında benim Giriş aktör rakam var ve olmalıdır görünüyor: onu görülebilir kırığın kaynak kodundan verilen bir giriş aktör örneği için adı olarak id kullanır Bu, verilmiş olan isme göre hesaplanır, ancak bu, şimdi, değerleri doğrudan elde etmek yerine bir dizgeden ayrıştıracağım şimdi biraz hacky hissettiriyor. Bu en iyi seçeneğim mi?
Fikirler için teşekkürler. Sadece ima ettiğimiz sorunun ilk kısmına doğrudan bir cevap olarak, ClusterSharding'in dinamik destekleri desteklemek için yerleşik bir yolu yoktur. Bu yüzden, cevabınızı 'benim en iyi seçeneğim bu mu?' Sorusuna ilişkin olarak bağlamsallaştırıyor. İyi cevap verdiğine inanıyorum. – Rich
Evet, tamamen kaldırılmasının ya da çalışmayan olarak işaretlenmesinin daha iyi olacağından emin değildim, bu yüzden akka'daki biri onu alacak * göz kırpıyor * (ya da en azından insanlar bunun bir seçenek olmadığını ve israf etmeyeceklerini biliyorlar denemek için zaman). Ayrıca, Guice ile bir şey elde etmek ve bir InjectedProps içine hack almak mümkün olabilir, bir yere böyle bir şey görmüştüm maalesef detayları hatırlamıyorum. –