2012-11-29 30 views
5

Tôi sử dụng RabbitMQ Web-STOMP trong dự án của tôi và nó rất tốt cho tôi, nhưng có một vấn đề với nó. Khi người tiêu dùng đăng ký vào một hàng đợi nó sẽ ngay lập tức tất cả các tin nhắn từ hàng đợi. Trong trường hợp của tôi, một nhiệm vụ tin nhắn có thể mất nhiều thời gian và nó là cần thiết để người tiêu dùng nhận được tin nhắn tiếp theo từ một hàng đợi chỉ khi trước đó đã được hoàn thành.Có cách nào để RabbitMQ STOMP ngừng sử dụng tin nhắn cho đến khi ACKed trước đó không?

Tất cả hoạt động tốt, khi xuất bản bắt đầu sau khi người tiêu dùng đăng ký, nhưng khi đã có tin nhắn trong hàng đợi, người tiêu dùng đã đăng ký đầu tiên sẽ nhận được tất cả và những người khác sẽ được miễn phí. Có bất cứ điều gì giống như node-amqp queue.shift() phương pháp để tiêu thụ thông điệp tiếp theo chỉ khi trước đó là ACKed?

Trả lời

4

(? Mà client bạn đang sử dụng)

Câu trả lời cho câu hỏi của bạn là basic_qos, xem amqp reference và tìm kiếm basic.qos

Trong C# API bạn sẽ làm như sau:

int prefetch = 10; 

IModel channel = connection.CreateModel(); //where connection is IConnection 
channel.basic_qos(0, prefetch, false); 

Kích thước tìm nạp trước có thể được sử dụng để thông báo cho máy chủ thỏmq số lượng thư gửi đến người tiêu dùng cho đến khi chúng được ACK. Kích thước tìm nạp trước được bỏ qua nếu tùy chọn NO-ACK được đặt.

Lưu ý rằng giá trị này có thể có tác động hiệu suất tiềm năng, hãy xem this.

+0

Tôi sử dụng trang web RabbitMQ - ** STOMP ** với trình duyệt JS. Tôi đã biết làm thế nào để đối phó với điều đó bằng cách sử dụng C# hoặc thậm chí node.js, nhưng là có QoS aby cho STOMP? –

+1

Đặt tìm nạp trước: 1 Đầu đề CONNECT và ack: tiêu đề ứng dụng khách cho SUBSCRIBE không hoạt động đối với tôi ... –

+1

Mắt của tôi ở đâu! Tất nhiên, "tìm nạp trước": 1 tiêu đề cho SUBSCRIBE là câu trả lời, cảm ơn bạn! –

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