2010-11-03 32 views
8

Tôi đã thiết lập máy chủ jms với HornetQ làm nhà cung cấp JMS (Hàng đợi).thứ tự lực của các tin nhắn với HornetQ

Tôi có một ứng dụng hoạt động như một nhà sản xuất và một ứng dụng khác (máy tính khác) làm người tiêu dùng.

Tôi hiểu rằng đặc điểm kỹ thuật JMS không đảm bảo thứ tự giao hàng, nhưng tôi đang tìm cách để thực hiện điều đó: nhận được thông báo chính xác theo thứ tự chúng đã được gửi, ngay cả khi nhà cung cấp riêng.

Bất kỳ ý tưởng nào?

Trả lời

2

Rõ ràng điều này có thể đạt được bằng cách tắt bộ nhớ cache của người tiêu dùng. Điều này được thực hiện bằng cách thay đổi hornetq-jms.xml:

<connection-factory name="ConnectionFactory"> 
     <connectors> 
     <connector-ref connector-name="netty-connector"/> 
     </connectors> 
     <entries> 
     <entry name="ConnectionFactory"/> 
     </entries> 

     <consumer-window-size>0</consumer-window-size> <!-- add this line --> 
    </connection-factory> 
+1

Nhưng bằng cách đặt kích thước cửa sổ thành 0, bạn đã giết chết một lớp bộ nhớ đệm có hiệu quả và sẽ ảnh hưởng đến hiệu suất. –

+0

Trong trường hợp của tôi, thứ tự các tin nhắn quan trọng hơn nhiều so với một số tổn thất hiệu năng tiềm ẩn. Tuy nhiên nếu bạn có một ý tưởng tốt hơn tôi thực sự muốn nghe nó. Cảm ơn. – Bogdan

+0

Đặt tùy chọn này không hoạt động đối với tôi, được thử nghiệm cục bộ với HornetQ 2.2.5. Một khách hàng sản xuất tin nhắn, một tiêu thụ, thứ tự không phải là tuần tự. – Dag

1

Thực tế mục 4.4.10.2 (Thứ tự gửi tin nhắn) của đặc tả JMS khá rõ ràng về đặt hàng.

Nếu bạn có một nhà sản xuất duy nhất, và người tiêu dùng duy nhất cho một hàng đợi hoặc đăng ký chủ đề, đặt hàng tin nhắn luôn được đảm bảo ngay cả khi có sự phân phối lại.

Nếu bạn có nhiều người tiêu dùng, bộ đệm của ứng dụng khách có thể được phân phối lại trong trường hợp quay lại hoặc đóng người tiêu dùng của bạn và bộ đệm ứng dụng khách có thể được phân phối theo thứ tự.

Trên HornetQ, bạn cũng có nhóm tin nhắn cho phép thêm ràng buộc đặt hàng vào các tin nhắn được sản xuất.

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