2012-07-01 30 views
7

Khung Akka đề xuất chỉ sử dụng diễn viên được nhập để tương tác với mã bên ngoài. Tuy nhiên, các diễn viên tiêu chuẩn từ akka không được phân loại. Có cách nào tốt hơn để tạo các loại diễn viên an toàn không? Có một số khung công tác diễn viên khác hoặc loại trình bao bọc an toàn xung quanh akka?Thông báo được nhập trong akka

+0

Bạn đang cố giải quyết vấn đề gì? –

+2

@ViktorKlang Tôi muốn chắc chắn rằng chỉ có các thông điệp chính xác được gửi đến các diễn viên của tôi. –

+0

Bạn có thể muốn xem http://stackoverflow.com/a/5551034/734191 trong đó Viktor cung cấp thêm một số giải thích (ví dụ: 'trở thành'). – Hbf

Trả lời

5

Nếu bạn thực sự muốn diễn viên có tính năng nhập tĩnh, thì bạn cũng có thể tiếp tục và sử dụng diễn viên được nhập trên toàn bộ mã của mình. Điều này không được khuyến khích vì một vài lý do.

1.) Bạn có nguy cơ bị hệ thống của bạn thoái hóa thành một loạt RPC. Phương thức nhận của một diễn viên làm cho nó khá rõ ràng rằng toàn bộ điều là về thông điệp đi qua, ít hơn rất nhiều vì vậy nếu bạn chỉ cần gọi phương pháp trên một diễn viên đánh máy.

2.) Một diễn viên thực sự không có loại. Trong khi nó đang chạy, các thông điệp mà một diễn viên có thể xử lý có thể thay đổi tùy thuộc vào trạng thái của nó, như những gì nó có thể thực hiện với các thông điệp đó. Đây là một cách tuyệt vời để lập mô hình nhiều giao thức và các diễn viên Akka có hỗ trợ lớp học đầu tiên cho nó với FSM. Vì vậy, nếu bạn thực sự muốn làm điều đó, bạn được tự do sử dụng các diễn viên được đánh máy ở mọi nơi và nó sẽ hoạt động, nhưng bạn thực sự nên suy nghĩ kỹ về vấn đề bạn đang cố gắng giải quyết trước khi làm như vậy. Các bạn có thể làm điều đó không ?.

0

Tại sao đây là vấn đề với bạn? akka.actor.Actor có phương thức nhận kiểu PartialFunction sẽ chỉ được gọi cho các thư mà nó có thể xử lý. Tại sao bạn cần kiểm tra thời gian biên dịch? Nhưng để trả lời câu hỏi của bạn: một cách sẽ là - cho một api bên ngoài - để xây dựng một trình bao bọc xung quanh ActorRef của bạn sau đó gửi các thông điệp tới tác nhân.

+4

Có, tôi muốn kiểm tra thời gian biên dịch. –

+0

Câu hỏi của tôi không phải là nếu bạn cần kiểm tra thời gian biên dịch, nhưng tại sao? – drexin

+7

vì tôi muốn bắt lỗi càng sớm càng tốt –

1

Để kiểm tra thời gian biên dịch, hãy xem SynapseGrid khuôn khổ. Nó định nghĩa một SystemBuilder xây dựng cấu trúc liên kết DataFlow. Trong khi xây dựng nó được đảm bảo rằng các loại đi qua được kiểm tra. Sau đó hệ thống kết quả được chuyển đổi thành RuntimeSystem với các diễn viên lồng nhau và được kết nối đúng cách.

0

Mọi thứ đang đi khá nhanh, tôi nghĩ đến việc từ một bản cập nhật 1. diễn viên Typed là deprecated 2. Thay vì một khái niệm mới về Akka Typed đang được devloped tại momemnt

Như tôi hiểu điều này nên sự giải pháp cuối cùng cho hệ thống diễn viên được nhập. Nhưng vì đây ít nhất là lần thử thứ ba và được lên kế hoạch sớm nhất cho Akka 2.4, tuyên bố này vẫn được chứng minh.

Cá nhân tôi mong muốn có cả hai hệ thống: hệ thống hiện có cho các trường hợp sử dụng động hơn, trường hợp mới cho các trường hợp sử dụng động hơn

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