2009-02-05 34 views
7

Tôi có một quy trình liên quan đến việc gửi tin nhắn JMS. Quá trình này là một phần của giao dịch. Nếu một phần sau của giao dịch không thành công, một phần sau phần trước đã gửi tin nhắn, tôi cần hủy tin nhắn. Một ý nghĩ tôi có là bằng cách nào đó đã đặt ra thông điệp rằng nó không được chọn trong một khoảng thời gian nhất định và nếu tôi cần khôi phục thì tôi có thể hủy và gửi tin nhắn. Không biết tin nhắn, tôi không biết ý tưởng đó là có thể. Hoặc, có ý tưởng nào tốt hơn không? Cảm ơnJMS rollback

Trả lời

7

Bạn có thể sử dụng JMS và JTA (API giao dịch Java) cùng nhau - see here. Khi làm điều đó, việc gửi một tin nhắn JMS hoặc tiêu thụ của một tin nhắn nhận được thực sự xảy ra một cách nguyên tử như một phần của giao dịch cam kết.

Điều này có nghĩa là gì? Nếu giao dịch bị lỗi hoặc được khôi phục, thông báo "đã gửi" sẽ không xuất hiện và mọi thư "đã nhận" không thực sự bị tiêu thụ. Tất cả được xử lý cho bạn bởi nhà cung cấp JMS và JTA của bạn.

Bạn cần sử dụng triển khai JMS có hỗ trợ JTA. Có vẻ như bạn đang sử dụng các giao dịch, do đó, có thể là làm một số cấu hình để làm cho nó xảy ra (vẫy tay mạnh mẽ ...).

Tôi đã có kinh nghiệm sử dụng tính năng này (BEA WebLogic 7 w/BEA WebLogic Integration). Làm việc như quảng cáo - "thế giới bên ngoài" thấy không có tác động của JMS công cụ tôi đã cố gắng trừ khi giao dịch cam kết thành công.

8

Điều bạn mô tả là giao dịch XA. Điều này cho phép một giao dịch có phạm vi trên nhiều lớp tức là nhà cung cấp JMS, DB hoặc bất kỳ EIS nào khác. Hầu hết các thùng chứa đều có thể được định cấu hình để sử dụng cả giao dịch XA và XA không có gì để kiểm tra cài đặt vùng chứa của bạn!

Ví dụ: nếu bạn đang sử dụng JMS với các giao dịch XA, bạn có thể thực hiện các thao tác sau.

Start Transaction 
     | 
    DB Insert 
     | 
    Send JMS Msg 
     | 
    More DB Inserts 
     | 
    Commit Transaction <- Only at this point will the database records be inserted and the JMS message sent. 

XA Tranactions chỉ có sẵn trong các thùng chứa Java EE đầy đủ nên giao dịch XA không có sẵn trong Tomcat.

Chúc may mắn!

Karl

+0

Cũng đưa vào hoạt động chi phí tài khoản: http://stackoverflow.com/questions/12305900/performance-overhead-of-xa-data-sources-best-practices – Vadzim