Cách mở rộng xử lý của actor trong akka
Scala
50
White

huydx viết ngày 20/06/2015

Spoiler: đây là note cá nhân của mình khi sử dụng akka.

Khi dùng akka thì cách sử dụng thông thường sẽ là extends Actor class và override lại hàm receive

import akka.actor._

class BaseActor extends Actor {
 def receive = {
   case Message1() => //do something1
   case Message2() => //do something2
 }
}

Về cơ bản thì receive được định nghĩa trong Actor object là một PartialFunction

type Receive = PartialFunction[Any, Unit]

Trong một số trường hợp khi các xử lý do something 1do something 2 trở nên phức tạp và logic không liên quan đến nhau, bạn muốn chia ra đặt ở các chỗ chứa khác nhau. Chỗ chứa ở đây có thể là 2 class: class 1 và class 2, có thể là trait 1 và trait 2. Tuy nhiên vấn đề ở đây là

Làm sao tách một partial function to ra thành các partial function nhỏ hơn

Để compose các partial function trong scala thì chúng ta dùng hàm orElse

partial1 orElse partial2

Như vậy với trường hợp ở trên chúng ta có thể tách thành các trait nhỏ hơn

trait Message1Op {
 def proc1 = {
  case Message1 => //do smt
 }
}

trait Message2Op {
 def proc1 = {
  case Message2 => //do smt
 }
}

class FooActor extends Actor with Message1Op with  Message2Op {
 def receive =  proc1 orElse proc2
}
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

huydx

116 bài viết.
940 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
148 14
Introduction (Link) là một cuộc thi ở Nhật, và cũng chỉ có riêng ở Nhật. Đây là một cuộc thi khá đặc trưng bởi sự thú vị của cách thi của nó, những...
huydx viết gần 2 năm trước
148 14
White
118 15
Happy programmer là gì nhỉ, chắc ai đọc xong title của bài post này cũng không hiểu ý mình định nói đến là gì :D. Đầu tiên với cá nhân mình thì hap...
huydx viết hơn 3 năm trước
118 15
White
95 10
(Ảnh) Mở đầu Chắc nhiều bạn đã nghe đến khái niệm oauth. Về cơ bản thì oauth là một phương thức chứng thực, mà nhờ đó một web service hay một ap...
huydx viết gần 3 năm trước
95 10
Bài viết liên quan
White
10 0
Kí tự Regex cơ bản Về cơ bản thì các sử lý matching của scala.util.matching.Regex sẽ được "phó thác" (delegate) cho java Regex. Bạn có thể tạo một ...
huydx viết 3 năm trước
10 0
White
7 1
Trong scala kí tự _ được dùng với khá nhiều mục đích .. không liên quan đến nhau. Tạm note lại cái đã khi nào có time sẽ quay lại viết cẩn thận sa...
huydx viết 3 năm trước
7 1
White
0 0
(Bài viết hơi khó hiểu, dành cho bạn nào có hứng thú với type programming trong scala với các thư viện như shapeless chẳng hạn) Thông thường với m...
huydx viết hơn 2 năm trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
116 bài viết.
940 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!