2013-05-30 42 views

Trả lời

7

Hiện không có giới hạn bộ nhớ quá trình - nó được thảo luận trong danh sách gửi thư vv Bạn có thể xem các chủ đề đó.

Trên mặt lên, khi bạn sử dụng triển khai thực hiện mẫu OTP như gen_server, bạn có nhiều sự tự do trong việc truy xuất thư từ hàng đợi xử lý và đo chiều dài của hàng đợi.

gen_server2 được sử dụng trong rabbitmq được sử dụng để tối ưu hóa điều đó bằng cách di chuyển thư đến cấu trúc dữ liệu nội bộ. Việc bạn có thể hủy bất kỳ thư mới đến nào khi hàng đợi nội bộ quá dài. Bạn có thể làm điều đó một cách im lặng hoặc thông báo cho người gửi rằng thư bị từ chối.

Tất cả điều đó ở mức rất thấp.

RabbitMQ sẽ cung cấp chức năng này ở cấp AMQP.

+0

gen_server2 trông đẹp –

+0

Gen_server2 có triển khai cửa sổ không? –

+0

Tôi không chắc chắn trạng thái hiện tại của việc thực hiện gen_server2 là gì. Nó có thể được bằng cách nào đó sáp nhập với một chính, sau khi giới thiệu phù hợp phi tuyến tính của các tin nhắn trong hàng đợi tin nhắn trong OTP gen_server. – user425720

6

Một cách phổ biến và khá tốt để thực thi kiểm soát luồng là tạo các thông điệp được chọn thành các cuộc gọi giới hạn số lượng tải mà mỗi khách hàng có thể tải máy chủ đến máy chủ, cung cấp hiệu quả nguồn cấp dữ liệu một cách cực kỳ đơn giản. Bí quyết là tất nhiên để chọn thông tin liên lạc nào sử dụng các cuộc gọi đồng bộ :-)

+0

Đây cũng là giải pháp của tôi. Về cơ bản xây dựng trong một số kiểm soát dòng chảy trên dòng. Có nhiều giải pháp nâng cao hơn cho điều này. –

+1

Tôi không chắc chắn nếu tôi hiểu. Bạn đề xuất các cuộc gọi đồng bộ hóa trên async đảm bảo rằng các thư được xếp hàng đợi ở phía máy khách? Tôi nghĩ rằng nó phụ thuộc vào trường hợp sử dụng. Nếu khách hàng là thoáng qua, chúng tôi có thể không đủ khả năng giải pháp này. – user425720

+0

Cốt lõi của vấn đề là để có bất kỳ hình thức kiểm soát dòng chảy, bạn sẽ cuối cùng đã có một số hình thức đồng bộ hóa. Nếu khách hàng cung cấp luồng chỉ đơn giản là lái xe bằng cách truyền thông điệp, chúng tôi không thể giới hạn nó theo bất kỳ cách nào. Câu trả lời cho điều đó là khá thường xuyên để giới hạn số lượng khách hàng ở vị trí đầu tiên nhưng điều đó sẽ yêu cầu một số hình thức kiến ​​thức tập trung về số lượng khách hàng, yêu cầu đồng bộ hóa. Vì vậy, cuối cùng nó sôi xuống đến nơi chúng tôi đồng bộ hóa. Một giải pháp phổ biến trong các ứng dụng telcom là quá đơn giản đổ vào các giao diện, nhưng phải biết khi nào đổ :-) –