2011-11-10 50 views
5

Để tránh OOM, tôi đang giới hạn kích thước hộp thư của một số diễn viên Akka 1.1.3 của tôi với một điều phối viên được chia sẻ tùy chỉnh. Ví dụ:Xử lý hộp thư bị ràng buộc bởi diễn viên Akka MessageQueueAppendFailedException

object Static { 
    val dispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher(
     "customDispatcher", 
     1000, 
     BoundedMailbox(capacity = 10) 
    ) 
} 

class MyActor extends Actor { 
    self.dispatcher = Static.dispatcher 
    ... 
} 

Tôi muốn phản ứng với các hộp thư tràn vì vậy tôi có thể nhắn tin các nhà sản xuất thượng nguồn để tạm dừng (mặt lưu ý: nó buồn bã trông giống như actor.stop(), chờ đợi, và actor.start() sẽ ném một ActorStartException). Một số mất mát dữ liệu có thể chấp nhận được giữa hàng đợi lấp đầy và hàng đợi thoát ra một chút.

chương Akka về Dispatchers nói

Khi cố gắng để gửi một thông điệp tới các diễn viên nó sẽ ném một MessageQueueAppendFailedException (“BlockingMessageTransferQueue chuyển timed out”) nếu thông điệp không thể được thêm vào hộp thư trong vòng thời gian được chỉ định bởi pushTimeout.

Tôi có thể bắt ngoại lệ này ở đâu?

Tài liệu làm cho âm thanh như tôi cần phải quấn mỗi myActor ! message trong thử/nắm bắt. Có đúng không? Tôi thực sự muốn tập trung xử lý của nó. Supervisor của tôi có thể chặn nó và chạy trình xử lý của tôi không?

+0

Mục đích của việc kiểm tra nó là gì? –

+0

Không chắc chắn điều này có áp dụng cho trường hợp cụ thể của bạn hay không, nhưng nếu bạn gặp phải tình huống mà bạn có nguy cơ tràn hộp thư, bạn có thể muốn xem xét thiết kế "kéo" nơi diễn viên người tiêu dùng yêu cầu công việc của nhà sản xuất chứ không phải nhà sản xuất gửi thư rác cho người tiêu dùng của bạn. –

+0

@Viktor nó là để có hành động ngược dòng, đặc biệt để tạm dừng người tiêu dùng (tôi sẽ thêm điều này vào câu hỏi). Dan là đúng, và tôi chắc chắn sẽ xem xét các mô hình kéo. Tuy nhiên tôi muốn làm điều này ngay bây giờ với ít rearchitecting, và mất dữ liệu là chấp nhận được. – Bluu

Trả lời

0

Hãy thử sử dụng cc.spray.json._ vì nó được xây dựng trên đầu trang của akka hoặc finagle của twitter.

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