Trong bài tutorial này, chúng ta sẽ viết một chương trình mô phỏng vòng đời của một Actor trong Akka bằng cách overide 4 hàm sau : preStart(), preRestart(), postStop() và postRestart(). Bốn hàm này được thể hiện trong vòng đời của một Actor như hình dưới đây (Lưu ý: preRestart() được gọi bởi instance cũ trong khi postRestart() được gọi bởi instance mới. Mặc định thì preRestart() sẽ hủy bỏ toàn bộ children của instance cũ, sau đó sẽ gọi hàm postStop() còn hàm postRestart() sẽ gọi preStart()):

Trước hết ta định nghĩa LifeCycleActor bằng cách sử dụng lại code của BasicActor trong bài Viết chương trình Akka cơ bản. Tuy nhiên, trong trường hợp mặc định, Actor sẽ đưa ra một Exception thay vì một tin nhắn cảnh báo (nhằm mô phỏng quá trình Restart của Actor):

Việc overidding bốn hàm: preStart(), preRestart(), postStop() và postRestart() được thực hiện như sau:

Để kiểm tra hoạt động của bốn hàm trên, ta gửi hai tin nhắn: một tin nhắn thông thường và một tin nhắn gây lỗi Exception:

Chạy chương trình trên ta được kết quả sau:

Trong trường hợp tin nhắn thông thường, chỉ có hàm preStart() được gọi. Tuy nhiên trong trường hợp xảy ra lỗi Exception thì cả bốn hàm đều được gọi theo đúng thứ tự: preRestart để xóa bỏ instance cũ rồi gọi hàm postStop(). Sau khi hàm postStop() thực thi xong, lần lượt hàm postRestart() và preStart() được gọi bởi instance mới tạo ra. Tương tự, khi ta tiến hành dừng actor thì hàm postStop() được gọi để giải phóng các tài nguyên liên quan đến actor đó.

Như vậy, chúng ta đã hoàn thành việc viết một chương trình sử dụng bốn hàm là preStart(), preRestart(), postStop() và postRestart() để mô phỏng vòng đời của một actor. Các bạn có thể tham khảo full code của chương trình dưới đây:

Tháng Một 13, 2019
ITechSeeker