2013-10-03 19 views
15

Tôi đang sử dụng thành công RabbitMQ. Tuy nhiên, tôi gặp vấn đề nếu tôi gặp phải tình huống có rất nhiều tin nhắn trên hàng đợi thì người tiêu dùng (dịch vụ Windows) cố gắng lấy tất cả và sau đó chỉ giữ chúng nhưng không bao giờ hành động hoặc thừa nhận chúng.RabbitMQ cách điều tiết người tiêu dùng

Khi số lượng tin nhắn trong trạng thái sẵn sàng thấp thì người tiêu dùng đối phó với thông lượng tốt, nó chỉ là nếu có vấn đề và có tồn đọng thì nó quá tham lam.

Có cách nào để định cấu hình số lượng thư tối đa mà người tiêu dùng sẽ cố gắng và chịu trách nhiệm cho bất kỳ lúc nào không?

Tôi có thể thấy trường RequestedChannelMax trên RabbitMQ.Client.ConnectionFactory là cài đặt đúng để giới hạn điều này?

Cảm ơn

+0

Liên quan: http://stackoverflow.com/questions/29841690/how-to-consume-one-message – Nav

Trả lời

21

Một người tiêu dùng, theo mặc định sẽ đọc như nhiều thông điệp như băng thông có thể xử lý bất kể thời gian xử lý thông điệp thực tế của người tiêu dùng.

Bạn cần đặt giá trị tìm nạp trước bằng cách sửa đổi Chất lượng dịch vụ (QoS) của kênh để hạn chế số lượng thư sẽ cố gắng nhận cùng một lúc. Kiểm tra basic.qos here. Nó có 3 tham số, một kích thước (trong octet), một số (số lượng toàn bộ thông báo nó sẽ nhận được cùng một lúc) và một lá cờ toàn cầu.

This blog post là một điều thú vị nếu bạn quan tâm đến việc tối ưu hóa thông lượng và nói về việc tìm nạp trước khoảng 2/3 đường xuống trang.

Hy vọng điều đó sẽ hữu ích!

+1

Cảm ơn đây là câu trả lời rất toàn diện và giúp tôi có được những gì tôi cần. '_model.BasicQos (0,100, sai);' – baynezy

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