Akka Cluster-Sharding trông giống như một trường hợp sử dụng, tôi phải tạo một cá thể duy nhất của các diễn viên liên tục trên các nút Akka.Akka cluster-sharding: Các diễn viên có thể có các đạo cụ động hay không
Tôi không rõ liệu có thể có loại nhập diễn viên yêu cầu đối số để xây dựng nó hay không. Hoặc có lẽ tôi cần phải xem xét lại cách diễn viên Entry nhận được thông tin này.
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 { ... }
Trong một trường hợp Đạo cụ duy nhất để tạo tất cả các diễn viên nhập cảnh.
val counterRegion: ActorRef = ClusterSharding(system).start(
typeName = "Counter",
entryProps = Some(Props[Counter]),
idExtractor = idExtractor,
shardResolver = shardResolver)
Và sau đó nó giải quyết các diễn viên nhập cảnh tiếp nhận thông điệp dựa trên cách bạn xác định idExtractor. Từ mã nguồn cho mảnh vỡ có thể thấy nó sử dụng id là tên cho một trường hợp nam diễn viên nhập cảnh đưa ra:
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
}
}
Có vẻ như tôi thay vì phải có con số diễn viên nhập cảnh của tôi ra khỏi khu vực của mình và accountId theo tên nó được đưa ra, mặc dù điều này không cảm thấy một chút hacky bây giờ mà tôi sẽ phân tích nó ra khỏi một chuỗi thay vì trực tiếp nhận được các giá trị. Đây có phải là lựa chọn tốt nhất của tôi không?
Cảm ơn các ý tưởng. Như một câu trả lời trực tiếp cho phần đầu tiên của câu hỏi mà chúng tôi đã chỉ ngụ ý, không có cách tích hợp với ClusterSharding để hỗ trợ các đạo cụ động. Vì vậy, ngữ cảnh hóa câu trả lời của bạn liên quan đến câu hỏi tiếp theo của tôi về 'đây có phải là lựa chọn tốt nhất của tôi không?' Mà tôi tin rằng bạn đã trả lời tốt. – Rich
Vâng, tôi không chắc liệu tốt hơn là loại bỏ nó hoàn toàn hoặc đánh dấu nó là không hoạt động để có thể ai đó ở akka sẽ nhặt nó lên * nháy mắt * (hoặc ít nhất mọi người sẽ biết nó không phải là một lựa chọn và sẽ không lãng phí thời gian thử nó). Ngoài ra, nó có thể có thể có được một cái gì đó với Guice và hack vào một InjectedProps, tôi đã thấy một cái gì đó như thế một nơi nào đó, tiếc là tôi không nhớ các chi tiết. –