2016-03-23 19 views
5

TL; DR: Tôi cần phải "phát lại" các thư đã chết trở lại hàng đợi ban đầu của chúng khi tôi đã sửa mã người tiêu dùng ban đầu khiến thư bị từ chối.Xử lý các chữ cái chết trong RabbitMQ

Tôi đã định cấu hình Trao đổi thư chết (DLX) cho RabbitMQ và đang định tuyến thành công các thư bị từ chối vào hàng đợi thư chết. Nhưng bây giờ tôi muốn nhìn vào các thông điệp trong hàng đợi chữ cái chết và cố gắng quyết định phải làm gì với mỗi người trong số họ. Một số (nhiều?) Của các thông báo này sẽ được phát lại (được đưa ra trước) vào hàng đợi ban đầu của chúng (có sẵn trong tiêu đề "x-death") khi mã tiêu dùng vi phạm đã được sửa. Nhưng làm thế nào để tôi thực sự đi về việc này? Tôi có nên viết một chương trình một lần đọc tin nhắn từ hàng đợi chữ cái chết và cho phép tôi chỉ định một hàng đợi đích để gửi chúng đến không? Và những gì về tìm kiếm hàng đợi thư chết? Điều gì sẽ xảy ra nếu tôi biết rằng một thông báo (giả sử được mã hóa bằng JSON) có một thuộc tính nào đó mà tôi muốn tìm kiếm và phát lại? Ví dụ, tôi sửa một lỗi mà tôi biết sẽ cho phép thông báo với PacketId: 1234 để xử lý thành công ngay bây giờ. Tôi cũng có thể viết một chương trình một lần cho điều này.

Tôi chắc chắn không thể là người đầu tiên gặp phải những vấn đề này và tôi tự hỏi liệu có ai khác đã giải quyết chúng không. Có vẻ như sẽ có một số loại Dao quân đội Thụy Sĩ cho loại thứ này. Tôi đã thực hiện một tìm kiếm khá rộng rãi trên Google và Stack Overflow nhưng không thực sự đưa ra nhiều. Điều gần nhất tôi có thể tìm thấy là xẻng nhưng điều đó không thực sự có vẻ giống như công cụ thích hợp cho công việc.

Trả lời

4

Tôi có nên viết chương trình một lần đọc tin nhắn từ hàng đợi chữ cái chết và cho phép tôi chỉ định hàng đợi đích để gửi hàng không?

nói chung, có.

bạn có thể thiết lập lại một lần nữa để cố gắng gửi lại thư trở lại hàng đợi ban đầu, sử dụng kết hợp của delay message exchange plugin.

nhưng điều này sẽ chỉ tự động thử lại trên một khoảng thời gian và bạn có thể chưa khắc phục được sự cố trước khi thử lại diễn ra.

trong một số trường hợp, điều này là ok - như khi lỗi gây ra bởi tài nguyên bên ngoài tạm thời không khả dụng.

trong trường hợp của bạn, tuy nhiên, tôi tin rằng những suy nghĩ của bạn vào việc tạo ra một ứng dụng để xử lý các chữ cái chết là cách tốt nhất để đi, vì nhiều lý do:

  • bạn cần phải tìm kiếm thông qua các thông điệp, mà isn 't có thể RMQ
  • này có nghĩa là bạn sẽ cần một cơ sở dữ liệu để lưu trữ các tin nhắn từ DLX/đợi

bởi vì bạn đang kéo các thông điệp ra khỏi DLX/hàng đợi, bạn sẽ cần phải đảm bảo bạn nhận được tất cả thông tin tiêu đề từ thư để bạn có thể tái xuất bản lên t anh ta xếp hàng đúng khi thời gian đến.

Tôi chắc chắn không thể là người đầu tiên gặp phải những vấn đề này và tôi tự hỏi liệu có ai khác đã giải quyết chúng không.

và bạn thì không!

có nhiều giải pháp cho vấn đề này mà tất cả đều đi đến giải pháp bạn đã đề xuất.

một số triển khai "dịch vụ xe buýt" lớn hơn có loại tính năng này được tích hợp sẵn. tôi tin rằng NServiceBus (hoặc phiên bản SaaS của nó) đã được xây dựng trong, ví dụ - mặc dù tôi không chắc chắn 100% của nó.

nếu bạn muốn xem xét thêm, hãy tìm kiếm cụm từ "thông điệp độc" - đây thường là thuật ngữ được sử dụng cho trường hợp này. Tôi đã tìm thấy một vài điều trên google với một tìm kiếm nhanh chóng, có thể giúp bạn xuống đường dẫn:

hy vọng rằng sẽ giúp!

+0

Tôi không tìm thấy các liên kết đặc biệt hữu ích nhưng tôi thực sự đánh giá cao câu trả lời kỹ lưỡng của bạn. Cảm ơn! – Dan

+0

vâng, tôi thực sự không đọc những liên kết đó. tôi chỉ cố gắng tìm một thứ gì đó nhanh chóng có thể hữu ích. có lẽ nên đọc chúng trước khi đăng chúng. : P –

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