2011-10-27 35 views
7

Tôi có một yêu cầu rằng tôi cần xử lý các tin nhắn JMS (thông qua MDB) theo cách tin nhắn thuộc về một nhóm nhất định (một nhóm ID được thiết lập) được tiêu thụ bởi cùng một cá thể bean. Hành vi mà tôi yêu cầu ở đây là các thư có cùng ID nhóm được xử lý tuần tự (mặc dù thứ tự tin nhắn không liên quan) và buộc chúng vào cùng một cá thể MDB sẽ cung cấp điều đó.Các nhóm tin nhắn trong WebSphere MQ

Thư không mang theo bất kỳ loại số thứ tự nào (vì nó không liên quan) và chúng tôi không biết thông điệp đầu tiên hoặc cuối cùng trong nhóm là gì (có thể "không bao giờ" là một thông điệp cuối cùng trong nhóm) . Chúng tôi muốn chúng được phân phối ngay sau khi người tiêu dùng có thể nhận được chúng.

ActiveMQ cung cấp tính năng chính xác này (http://activemq.apache.org/message-groups.html) bằng cách chỉ cần đặt JMSXGroupID. Tuy nhiên, chúng tôi bị ràng buộc với WebSphere MQ. Tất cả những gì tôi đã phát hiện ra là có thể thu thập các Tin nhắn của cùng một nhóm trong hàng đợi và sử dụng một MessageSelector để nhận được thông báo "Tin nhắn cuối cùng trong nhóm" như được mô tả trong http://www.ibm.com/developerworks/websphere/library/techarticles/0602_currie/0602_currie.html. Chúng tôi muốn một cách sạch hơn mặc dù (như trong ActiveMQ). Có ai biết làm thế nào để đạt được hành vi đó trong WebSphere?

Cảm ơn!

Trả lời

2

Thông thường bạn sử dụng MessageSelectors trong triển khai sản phẩm JMS của IBM (cả triển khai WebSphere MQ và SIBus). Đây là tương đương với một bộ lọc sẽ quét tiêu đề của một thông báo HTTP hoặc SOAP cho các giao thức dựa trên web.

Mặc dù nó có thể không phải là những gì bạn muốn, nó thực sự là một thiết kế sạch sẽ và được thiết kế tốt. Tuy nhiên, nếu bạn không muốn sử dụng MessageSelectors, có thể bạn sẽ phải xây dựng thông điệp của riêng bạn và "xử lý" với MDB đặt trước quét các tiêu đề, sau đó chuyển tiếp thư đến hàng đợi thích hợp, chỉ ở đó MDB quan tâm đến các tin nhắn được nhóm sẽ xử lý chúng (loại một mẫu chọn cổng/tin nhắn).

Nếu bạn đang sử dụng API JMS "thuần", thì bạn có thể yêu cầu đối tượng Phiên tạo một MessageConsumer với chuỗi chọn được chỉ định (giá trị trong tiêu đề) bạn muốn lọc (một lần nữa bạn phải tự cài đặt)).

//assume we have created a JMS Connection and Session object already. 
//and looked up the Queue we want already. 
MessageConsumer consumerWithSelector = session.createConsumer(queue, groupId); 

Đây là tất cả API JMS tinh khiết cung cấp cho bạn. Bất cứ điều gì khác hoàn toàn phụ thuộc vào người thực hiện công nghệ nhắn tin, sau đó độc quyền cho việc triển khai và không phải là mã di động.

+0

Cảm ơn, đó là những gì tôi mong đợi. – ftr

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