2015-06-24 19 views
8

Có ghi chú này trong akka-stream docs nêu như sau:nguồn Live in Akka Suối mô tả dòng chảy

... một mô tả dòng chảy tái sử dụng không thể bị ràng buộc với các nguồn lực “sống”, bất kỳ kết nối đến hoặc phân bổ các nguồn lực như vậy phải được hoãn lại cho đến khi thời gian vật chất hóa. Ví dụ về các tài nguyên “sống” là các kết nối TCP hiện có, một Nhà xuất bản đa phương tiện, v.v. ...

Tôi có một số câu hỏi liên quan đến việc lưu ý:

  • Ngoài hai ví dụ này, những gì đếm tài nguyên khác như là một live?
    • Bất kỳ nội dung nào không được sao chép an toàn? Giống như một số Thread?
    • Tôi cũng có nên tránh chia sẻ mọi thứ không an toàn không?
  • Điều gì về một ActorRef hiện có trong ActorSystem được sử dụng bởi ActorFlowMaterializer?
  • Làm cách nào để trì hoãn phân bổ cho đến thời gian hiện thực hóa? Có an toàn không, ví dụ để phân bổ nó trong hàm tạo của một PushPullStage nhưng không phải trong hàm tạo của một FlowGraph?
+0

Từ những gì tôi đã hiểu, biểu đồ của bạn không nên tham chiếu trực tiếp "tài nguyên" nhưng chứa chức năng để tìm kiếm tài nguyên tại thời điểm hiện thực hóa. một diễn viên ref nên được tốt kể từ khi nó khá nhiều đó. – dwegener

Trả lời

2

Vấn đề ở đây là một vấn đề phổ biến nếu chúng tôi xem xét các dịch vụ web, kết nối RMI hoặc bất kỳ giao thức truyền thông nào khác. Nó luôn luôn khuyến khích chia sẻ giá trị "nguyên thủy" sau đó tham khảo, bởi vì marshalling/unmarshalling hoặc serializing/unserializing luôn luôn là một nhức đầu. Cũng nghĩ về các loại môi trường khác nhau giao tiếp với nhau. Chia sẻ các giá trị vững chắc là một cách an toàn để giải quyết giao tiếp.

Bản thân Akka là một ví dụ điển hình về các diễn viên liên lạc "microservices". Khi tôi đọc tài liệu về Akka, một từ tốt đã định nghĩa các diễn viên Akka rất tốt. Các diễn viên giống như các khách hàng hộp thư và bạn có thể nghĩ rằng mỗi khách hàng có một hộp thư. Khi bạn chuyển một biến, nó giống như bạn có một email mới.

Kết quả ngắn của câu chuyện dài, tránh chia sẻ các đối tượng "phụ thuộc" có thể bị vô hiệu hóa trước khi được đọc từ một diễn viên khác. Ngoài ra, nếu hệ thống của bạn đặt tên là actorRefs động, hãy tránh gọi chúng bằng tham chiếu của hệ thống.

"Vật liệu hóa" được giải thích trong tài liệu về suối Akka.

Quá trình hiện thực hóa có thể được tham số hóa, ví dụ: instantiating một kế hoạch chi tiết để xử lý dữ liệu của kết nối TCP với thông tin cụ thể về địa chỉ của kết nối và thông tin cổng. Ngoài ra, materialization thường sẽ tạo ra các đối tượng cụ thể hữu ích để tương tác với công cụ xử lý khi nó đang chạy, ví dụ để tắt nó hoặc để trích xuất các số liệu. Điều này có nghĩa là hàm vật chất hóa có một tập các tham số từ bên ngoài và nó tạo ra một tập các kết quả. Tính tổng hợp yêu cầu hai bộ này không thể tương tác, bởi vì điều đó sẽ thiết lập một kênh bí mật theo đó các phần khác nhau có thể giao tiếp, dẫn đến các vấn đề về thứ tự khởi tạo và lỗi thời gian chạy không thể xảy ra.

Vì vậy, hãy sử dụng các thông số thay vì tự chuyển "kết nối".

Trì hoãn tài nguyên trực tiếp không phải là một suy nghĩ lớn.Điều đó có nghĩa là nếu bạn sử dụng một kết nối cho tất cả hệ thống, bạn nên giữ cho nó luôn hoạt động. Hoặc khi bạn tạo một giao dịch trong diễn viên-1 và gửi nó cho nam diễn viên-2, bạn không nên chấm dứt giao dịch trong diễn viên-1 cho đến khi diễn viên-2 hoàn thành công việc của mình với giao dịch.

Sau đó, cách bạn có thể hiểu? Sau đó, bạn sử dụng "Tương lai" và "phiếu mua hàng()".

Hy vọng tôi hiểu câu hỏi của bạn và hy vọng tôi có thể thể hiện bản thân mình.

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