Chúng tôi đang xây dựng một dự án tích hợp bằng cách sử dụng Apache Camel (Camel 2.10.3, Java DSL based).Làm cách nào để phát hiện kết nối JMS bị hỏng/khôi phục trong Apache Camel?
Chúng tôi có tuyến đường trích xuất dữ liệu từ cơ sở dữ liệu (cho phép gọi IN_DB), thực hiện một số logic và chèn vào cơ sở dữ liệu khác (OUT_DB) một lần một ngày và một tuyến khác đăng ký chủ đề JMS cho dữ liệu XML một số logic và chèn nó vào cùng một cơ sở dữ liệu (OUT_DB) trong suốt cả ngày.
Yêu cầu là khi kết nối chủ đề JMS bị hỏng vì bất kỳ lý do nào, chúng tôi tiếp tục kết nối lại vô thời hạn và khi kết nối lại thành công, chúng tôi cần quay lại cơ sở dữ liệu (IN_DB) và thực hiện một tải khác để điền vào khoảng cách mà chủ đề đã giảm.
Câu hỏi của tôi là làm thế nào chúng ta có thể làm logic này ('Tôi đã được kết nối sau đó tôi đã bị ngắt kết nối và bây giờ tôi được kết nối lại') trong Camel? Điều gì sẽ xảy ra với tuyến đường bắt đầu với người tiêu dùng chủ đề khi chủ đề đi xuống, tuyến đường sẽ dừng lại? Hoặc nó sẽ phát hành một thông báo lỗi cho một số hàng đợi lỗi? Tôi có phải viết trình xử lý của riêng mình để theo dõi kết nối chủ đề hay Camel sẽ tự động kết nối lại khi chủ đề quay lại và đặt tiêu đề thư hoặc đặt một số biến ngữ cảnh để cho biết rằng 'Tôi đã kết nối rồi tôi bị ngắt kết nối và bây giờ Tôi được kết nối lần nữa 'kịch bản đã xảy ra? Tôi hạnh phúc xây dựng logic tuyến đường xung quanh việc gọi tải cơ sở dữ liệu Tôi chỉ không thể tìm ra cách tốt nhất để 'phát hiện' trong Camel rằng kịch bản này đã xảy ra.
Mọi đề xuất được đánh giá cao.
Cảm ơn Matt, một số đề xuất tuyệt vời tại đây. Thật không may, chúng tôi không sở hữu các chủ đề mà chúng tôi đang đăng ký (nhà môi giới Tibco EMS) và đang kết nối với các tài khoản chỉ đọc giúp cho phương pháp tiếp cận nhịp tim trở nên khó khăn một chút. Trường hợp ngoại lệ JMS sẽ được ném từ đâu? JMSComponent chính nó, hoặc các tuyến đường tiêu thụ từ nó? – Matt
Bạn dường như có một chút khó khăn cho các tùy chọn! Tôi đã không có một ví dụ để bàn tay nhưng người nghe ngoại lệ được đăng ký trên kết nối vì vậy ngoại lệ nên được ném bởi kết nối hơn là từ một nơi nào đó trong tuyến đường. Lựa chọn duy nhất khác của bạn là truy vấn IN_DB thường xuyên để xem nó có bất kỳ thư nào mà bạn không biết nhưng tôi nghi ngờ điều đó không thực tế. –