2011-12-11 26 views
6

Tôi đang viết thư cho hàng đợi RabbitMQ với amqp mùa xuân bằng cách sử dụng lớp RabbitTemplate. Tôi sử dụng phương thức convertAndSend để gửi tin nhắn đến hàng đợi. Điều này hoạt động tốt trong các tình huống bình thường, nhưng có vẻ như không thành công nếu hàng đợi không tồn tại. Không có ngoại lệ được ném và không có thông báo lỗi/gỡ lỗi được ghi vào nhật ký.Làm cách nào để biết rằng thư của tôi đã được gửi thành công với amqp mùa xuân?

Cách tốt nhất để tôi đảm bảo thư được gửi là gì?

Dưới đây là ví dụ về mã hiện đang làm.

RabbitTemplate template = new RabbitTemplate(factory); 
template.setQueue(queueName); 
template.setRoutingKey(queueName); 
template.convertAndSend(message); 
+0

bạn có chắc chắn là không có thư nào được ghi lại không? Bạn đã thử một bài kiểm tra đơn vị với các nhà môi giới cố tình xuống? – artbristol

+0

Tôi đã không chính xác về sự im lặng thất bại nếu môi giới là xuống, tôi thực sự nhận được một UnknownHostException nếu môi giới là xuống. Tôi đã cập nhật câu hỏi. Điều đó nói rằng, tôi vẫn không nhận được bất kỳ ngoại lệ hoặc thông báo lỗi nếu hàng đợi không tồn tại. –

+0

bạn có thể đăng đoạn mã nơi bạn gửi tin nhắn không? – artbristol

Trả lời

2

Nó không phải là lỗi cho một khách hàng RabbitMQ gửi tin nhắn đến một nhà môi giới không có hàng đợi trong đó để chấp nhận tin nhắn. RabbitMQ sẽ âm thầm thả nó và khách hàng sẽ không còn khôn ngoan hơn nữa. Nếu bạn không có hàng đợi quan tâm đến thư của bạn, nhà môi giới không có nhiều tùy chọn khác có sẵn cho nó.

Điều đó nói rằng, bạn có thể làm cho RabbitMQ phàn nàn nếu thông báo sẽ kết thúc âm thầm giảm xuống bằng cách đặt cờ mandatory. Tôi không biết liệu các giao diện Spring AMQP có hỗ trợ nó hay không, nhưng nó chắc chắn có sẵn trong thư viện máy khách Java của RabbitMQ.

+0

Cảm ơn, tôi sẽ xem xét nó. Tôi sẽ cố gắng để có được nó vào ngày mai, chúng tôi đang khá bận rộn ngay bây giờ. –

+0

Tôi không thấy bất kỳ cách nào để đặt cờ bắt buộc. Không có đối tượng spring-amqp nào tôi đang sử dụng dường như có cài đặt đó. –

+0

Tôi nghĩ rằng vấn đề của tôi là thông điệp được coi là được phân phối bởi vì nó đến nơi trao đổi. Tin nhắn không bao giờ được chuyển đến hàng đợi vì nó không tồn tại. Có thể có một số cấu hình trong thỏ cần được thiết lập để đảm bảo thư không bị mất. –

1

Bạn có thể sử dụng mandatory và cũng cho phép trả lại của nhà xuất bản (đối với thư không gửi được).

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