2012-06-21 35 views
6

Tôi mới sử dụng RabbitMQ và đang băn khoăn về cách tiếp cận tốt cho vấn đề này mà tôi đang nghiền ngẫm. Tôi muốn tạo một dịch vụ đăng ký hàng đợi và chỉ kéo các thư đáp ứng tiêu chí cụ thể; ví dụ: nếu tiêu đề chủ đề cụ thể nằm trong thư.RabbitMQ-- chọn lọc truy xuất thư từ hàng đợi

Tôi vẫn đang tìm hiểu về RabbitMQ và đang tìm kiếm các mẹo về cách tiếp cận vấn đề này. Câu hỏi của tôi bao gồm: làm thế nào người tiêu dùng có thể kéo các thông điệp cụ thể từ hàng đợi? Làm cách nào nhà sản xuất có thể đặt tiêu đề chủ đề trong thư (nếu đó là cụm từ phù hợp?)

+0

Nếu thực sự tiêu dùng của bạn đã đăng ký ** ** (không quan tâm đến các thông điệp được công bố _before_ đăng ký), đăng ký (và bắt buộc đối với quy tắc lựa chọn) không phải là một _queue_ hiện có mà là một _exchange_ hiện có (như được trả lời dưới đây) .. Sau đó, từ ngữ của câu hỏi sẽ được chỉnh sửa. – Myobis

Trả lời

14

ThỏMQ là hoàn hảo cho tình huống này. Bạn có một số tùy chọn để thực hiện những gì bạn muốn. Tôi khuyên bạn nên đọc tài liệu để hiểu rõ hơn. Tôi khuyên bạn nên sử dụng một chủ đề hoặc trao đổi trực tiếp. Chủ đề linh hoạt hơn. Nó như thế này

Mã nhà sản xuất kết nối với Nhà môi giới RabbitMQ và tạo và trao đổi với một tên cụ thể.

Nhà xuất bản xuất bản để trao đổi. Mỗi tin nhắn được xuất bản sẽ được xuất bản với một khóa định tuyến.

Người tiêu dùng kết nối với nhà môi giới RabbitMQ.

Người tiêu dùng tạo Hàng đợi

Liên kết người tiêu dùng Queue trao đổi, trao đổi tương tự được xác định trong nhà sản xuất. Các ràng buộc cũng bao gồm các phím định tuyến cho mỗi tin nhắn yêu cầu cho người tiêu dùng cụ thể này.

Cho phép nói rằng bạn đã xuất bản thông điệp tường trình. Khóa định tuyến có thể giống như "log.info", "log.warn", "log.error". Mỗi tin nhắn được xuất bản bởi nhà sản xuất sẽ có khóa định tuyến có liên quan kèm theo. Sau đó, bạn sẽ có một người tiêu dùng gửi và gửi email cho tất cả các thông báo lỗi và một thư khác viết tất cả các thông báo lỗi vào một tệp. Vì vậy, người gửi email sẽ xác định ràng buộc từ hàng đợi của nó đến trao đổi với khóa định tuyến "log.error". Bằng cách này, mặc dù trao đổi nhận được tất cả các tin nhắn, hàng đợi được xác định cho người gửi email sẽ chỉ chứa các thông báo lỗi. Filelogger sẽ định nghĩa một hàng đợi riêng biệt mới được liên kết với cùng một trao đổi và thiết lập một khóa định tuyến khác. Bạn có thể thực hiện ba ràng buộc riêng biệt cho ba khóa định tuyến khác nhau yêu cầu hoặc chỉ sử dụng ký tự đại diện "log. *" Để yêu cầu tất cả thư từ trao đổi bắt đầu bằng nhật ký.

Đây là một ví dụ đơn giản cho thấy cách bạn có thể đạt được những gì bạn muốn làm.

nhìn here cho ví dụ mã đặc biệt đánh số số hướng dẫn 5.

+0

Bạn có nghĩa là người tiêu dùng có thể truy xuất thư có khóa định tuyến cụ thể trong một hàng đợi không? Có vẻ như người tiêu dùng không có lựa chọn, nó chỉ nhận được tất cả các tin nhắn từ hàng đợi. – ThemeZ

+2

@ThemeZ người tiêu dùng nhận được tất cả thư từ hàng đợi. Tôi nghĩ đó là theo định nghĩa. Điểm ở đây là chúng được lọc ở cấp độ trao đổi. Với một chủ đề trao đổi hàng đợi sẽ chỉ nhận được một số tin nhắn. Bằng cách đó, người tiêu dùng sẽ đọc tin nhắn họ muốn vì hàng đợi chỉ nhận được thông điệp mà người tiêu dùng muốn. – robthewolf

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