2015-01-02 11 views
7

Tôi có một số dự án Akka và tôi có kịch bản sau: Tôi có rất nhiều diễn viên mà tôi muốn có một cái tên có thể đọc được, nhưng đồng thời, tôi không muốn tạo tên duy nhất cho mỗi một Minh. Vì vậy, có cách nào để tôi có thể nói cho các đạo cụ hoặc hệ thống diễn viên để tiền tố tên tự động tạo ra với một chuỗi cụ thể?Tôi có thể cung cấp tiền tố cho tên tự động của một số diễn viên không?

Ví dụ: Tôi có một số diễn viên chính là người tạo ra một số trẻ em thuộc loại Người lao động. Tôi muốn rằng tên của mỗi đứa trẻ bắt đầu bằng "công nhân-" vì vậy tôi có thể dễ dàng theo dõi trong nhật ký. Ngoài ra, nếu có thể, tôi muốn biết nếu có những cách khác để đặt tên cho các diễn viên trong một thời trang tốt hơn.

Xin cảm ơn trước.

EDIT: đây là một ví dụ về những gì tôi muốn có

Hiện tại, bạn có hai lựa chọn, một xa như tôi có thể thấy:

1) Tạo các diễn viên với tự động tạo ra tên

ActorRef myActor = mySystem.actorOf(MyActor.props()); 

2) Tạo diễn viên với một tên người dùng chỉ định

ActorRef myActor = mySystem.actorOf(MyActor.props(), MyNamingAPI.getSomeNewName()); 

1) rất tệ vì trong nhật ký tôi không biết ai là ai. 2) là xấu vì tôi phải viết/sử dụng API của riêng mình và vì nếu ai đó sử dụng dự án diễn viên của tôi làm hệ thống phụ, anh ta sẽ phải cẩn thận để không lặp lại tên hoặc sử dụng hệ thống diễn viên khác. Vì vậy, nó không phải di động.

Tôi muốn nếu Akka hỗ trợ cái gì đó như:

ActorRef myActor = mySystem.actorOf(MyActor.props(), "my-actor-%"); 

nơi biểu tượng% biểu thị ID tự động tạo ra.

+0

Đáng buồn thay, điều này không được hỗ trợ trong API. Nếu không tự tạo tên hoặc sử dụng API làm thế hệ dưới mui xe, bạn không thể. –

Trả lời

1

Như @VinceEmigh đề cập trong các ý kiến, điều này không được hỗ trợ bởi các API. Hơn nữa, nhóm Akka không có kế hoạch để hỗ trợ nó sớm (hoặc ở tất cả). Thêm thông tin về số này here.

-2

Xem có điều gì đó như sau sẽ hoạt động không. Về cơ bản bạn có thể chuyển một số seq cho các nhân viên của bạn khi bạn tạo chúng. Bằng cách đó bạn có thể liên hệ lại với họ.

import akka.actor.{Props, ActorSystem, Actor} 


object ActorNaming extends App { 

    implicit val actorSys = ActorSystem("NameDemoAS") 

    val master = actorSys.actorOf(Props[Master], "my-name-is-master") 
    master ! "name" 

    (1 to 10).map{ i => actorSys.actorOf(Props[Worker], s"my-name-is-worker-$i")}.map{ actor => actor ! "name"} 

} 


class Master extends Actor { 

    def receive : Receive = { 
    case "name" => println(context.self.path.name) 
    } 
} 

class Worker extends Actor { 
    def receive : Receive = { 
    case "name" => println(context.self.path.name) 
    } 
} 

Đầu ra là

my-name-is-master 
my-name-is-worker-1 
my-name-is-worker-2 
my-name-is-worker-7 
my-name-is-worker-3 
my-name-is-worker-4 
my-name-is-worker-8 
my-name-is-worker-5 
my-name-is-worker-6 
my-name-is-worker-9 
my-name-is-worker-10 
+0

Cảm ơn câu trả lời của bạn! Chắc chắn công trình, nhưng trong câu hỏi của tôi, tôi nói rằng "Tôi không muốn tự mình tạo tên riêng cho từng người". Các khả năng tạo ra các tên duy nhất là vô hạn, và bản mẫu không thực sự quan trọng, vì bạn sẽ chỉ viết nó một lần và tái sử dụng nó. Câu hỏi của tôi là nếu không có một cách gọn gàng được hỗ trợ bởi API. – ale64bit

+0

Được rồi. Bạn có thể cung cấp một ví dụ (mã giả) về loại API nào muốn xem để tạo tên không. Nhưng bạn có nghĩ rằng một cái gì đó như thế này nên là một phần của API tiêu chuẩn? Bạn có muốn tên hoàn toàn ngẫu nhiên không? IMO, việc đặt tên có thể là một ngữ cảnh đặc biệt và điều khiển miền. –

+0

"Tôi không muốn tự mình tạo tên riêng cho từng tên" - Bạn có tự tạo ra những diễn viên này hay không? –

Các vấn đề liên quan