2010-05-13 13 views
8

Giả sử bạn có hàng đợi JMS và nhiều người tiêu dùng đang xem hàng đợi cho thư. Bạn muốn một trong những người tiêu dùng nhận được tất cả loại thông điệp cụ thể, do đó bạn quyết định sử dụng message selectors.JMS - Làm cách nào để bộ chọn tin nhắn hoạt động với nhiều người tiêu dùng xếp hàng và chủ đề?

Ví dụ: bạn xác định thuộc tính để đi vào tiêu đề thư JMS có tên là targetConsumer. Bộ chọn tin nhắn của bạn, mà bạn áp dụng cho người tiêu dùng được gọi là, A, là một cái gì đó như WHERE targetConsumer = 'CONSUMER_A'.

Rõ ràng là người tiêu dùng A sẽ chỉ lấy thông điệp có thuộc tính được đặt như trong ví dụ. Tuy nhiên, những người tiêu dùng khác sẽ nhận thức được điều đó? IOW, một người tiêu dùng khác, không bị giới hạn bởi một bộ chọn tin nhắn, lấy thông điệp CONSUMER_A, nếu nó nhìn vào hàng đợi trước Consumer A? Tôi có cần áp dụng các công cụ chọn thư như, WHERE targetConsumer <> 'CONSUMER_A' cho những người khác không?

Tôi đang RTFMing và thu thập dữ liệu thực nghiệm ngay bây giờ, nhưng hy vọng một người nào đó có thể biết từ đầu họ.

Trả lời

7

Khi nhiều người tiêu dùng sử dụng cùng một hàng đợi, bộ chọn tin nhắn cần được định cấu hình chính xác trên những người tiêu dùng này để không có xung đột trong việc xác định người tiêu dùng dự định.

Trong trường hợp của hạt hướng tin nhắn (người tiêu dùng thông điệp JMS), bộ chọn có thể được chỉ định trong tệp ejb-jar.xml do đó cho phép cấu hình được thực hiện tại thời điểm triển khai (thay vì đối lập) xem chỉ định bộ chọn tin nhắn trong quá trình phát triển).

Chỉnh sửa: Trong cuộc sống thực, điều này sẽ có ý nghĩa khi người tiêu dùng khác nhau chịu trách nhiệm xử lý thư có cùng tiêu đề (thường được tạo bởi cùng một nhà sản xuất) được viết trên cùng một hàng đợi. Ví dụ, bộ chọn tin nhắn có thể được sử dụng trong một ứng dụng giao dịch, để phân biệt giữa các lệnh mua và bán, khi nhà sản xuất không có khả năng viết các thông điệp JMS lên hai hàng mua và bán riêng biệt.

+0

Tôi không thấy cách trả lời câu hỏi này. Bạn có nghĩa là để nói rằng trong kịch bản được mô tả ở trên, một người tiêu dùng tin nhắn không bị giới hạn sẽ lấy tin nhắn CONSUMER_A? –

0

Có, một người tiêu dùng khác không sử dụng bất kỳ công cụ chọn thư nào sẽ nhận được thông báo dành cho người tiêu dùng A (hoặc cho rằng bất kỳ thông báo nào trên hàng đợi). Do đó khi chia sẻ một hàng đợi, các ứng dụng của người tiêu dùng phải được xử lý kỷ luật và chỉ chọn những thông điệp dành cho họ.

0

Người dùng tin nhắn JMS 'đầu tiên' từ hàng đợi sẽ nhận thông báo nếu bộ chọn phù hợp. 'Thứ nhất' có nghĩa là chi tiết thực hiện (có thể là round-robin, dựa trên mức độ ưu tiên hoặc sự gần gũi của mạng). Vì vậy, khi sử dụng bộ chọn trên hàng đợi, bạn cần đảm bảo rằng các bộ chọn này là 'không chồng chéo'.

chính thức thêm: không có thông báo phải tồn tại phù hợp với 2 bộ chọn trên cùng một hàng đợi

Đây lại là một nhược điểm của hàng đợi so với chủ đề - trong thực tế, bạn nên luôn luôn xem xét sử dụng chủ đề đầu tiên. Với một chủ đề, mỗi người tiêu dùng phù hợp sẽ nhận được thông báo.