Giả sử một số nhà sản xuất xuất bản cho cùng một trao đổi E (fanout). Mỗi nhà sản xuất có kênh riêng. Hàng đợi Q bị ràng buộc để trao đổi E. nhà sản xuất P1 xuất bản thông điệp M1 đến E và nhận được xác nhận A1 từ E. Chỉ sau khi xác nhận A1 nhà sản xuất thứ hai P2 xuất bản thông báo thứ hai M2. Thứ tự bảo hành của RabbitMQ trong Q: M1 là đầu tiên, M2 là thứ hai? Điều đó sẽ được đăng ký với người tiêu dùng Q luôn nhận M1 và sau đó là M2?Gửi tin nhắn thứ hai sau khi nhận được tin nhắn đầu tiên. ThỏMQ có bảo đảm đơn đặt hàng không?
Trả lời
RabbitMQ đảm bảo thứ tự các thư trong hàng đợi: Trước tiên, Đầu tiên. Tin nhắn đầu tiên đi vào hàng đợi sẽ là thông điệp đầu tiên xuất hiện trong hàng đợi và chúng sẽ vẫn giữ nguyên thứ tự (giả sử bạn chỉ đang tiêu thụ và acking chúng ... nếu bạn bắt đầu nacking/rejecting message, tái xuất bản chúng , vv, mọi thứ thay đổi)
Đó là sự đảm bảo duy nhất mà nó sẽ thực hiện theo thứ tự các thông điệp: Hàng đợi FIFO.
Nếu bạn cần đảm bảo thứ tự thư được gửi đến hàng đợi, bạn phải tự mình xây dựng quy trình đó.
FWIW, rất khó để xây dựng đảm bảo này. Cách duy nhất được đảm bảo thực sự để đảm bảo thứ tự của các tin nhắn không phải là gửi tin nhắn tiếp theo cho đến sau lần xử lý đầu tiên được xử lý.
Ngay cả khi bạn chờ xác nhận của nhà xuất bản trước khi gửi bản tiếp theo, có thể người tiếp theo sẽ kết thúc trong hàng đợi trước lần đầu tiên (mặc dù rất khó xảy ra).
Bạn có thể muốn xem xét Message Sequence và Resequencer nếu bạn cần đảm bảo khách hàng nhận được thư theo một thứ tự nhất định.
Cảm ơn bạn. Tôi hiểu bạn trả lời là "Không". Cả hai chúng tôi đều đồng ý rằng "Thông báo đầu tiên đi vào hàng đợi ** ** sẽ là thông điệp đầu tiên xuất hiện trong hàng đợi". Nhưng câu hỏi của tôi là khoảng cách ** giữa trao đổi và xếp hàng **. Và nếu tôi hiểu chính xác bạn nói rằng trao đổi có thể thừa nhận có được thông điệp M1 đến P1, nhận được tin nhắn M2 và đặt chúng trong hàng đợi theo thứ tự ngược lại: M2, sau đó M1. Chính xác? – Kaponir
rất khó xảy ra điều này, nhưng vẫn có thể xảy ra. M1 có thể rất lớn và yêu cầu ghi vào đĩa, ví dụ, trong khi M2 là rất nhỏ và không yêu cầu ghi vào đĩa. Hoặc, quá trình erlang đang hoạt động trên M1 có thể bị lỗi và phải khởi động lại, cho phép M2 đến đó trước. Một lần nữa, không có khả năng kịch bản, nhưng có thể, vẫn còn. –
cuối cùng, nếu bạn cần thứ tự xử lý được bảo đảm, bạn đã sử dụng trình tự sắp xếp và giới hạn xử lý hàng đợi thành 1 thư cùng một lúc để bạn có thể sắp xếp lại các thư đúng cách nếu chúng bị lỗi –
- 1. Đơn đặt hàng tin nhắn có đảm bảo cho xe buýt của Akka không?
- 2. Hai loại tin nhắn trong một hàng đợi tin nhắn
- 3. Đảm bảo gửi nhiều tin nhắn đến Kafka cluster
- 4. Đặt hàng các tin nhắn
- 5. Thứ tự tin nhắn có được lưu giữ trong tin nhắn MQTT không?
- 6. Dịch vụ không nhận được tin nhắn sau khi dịch vụ Xếp hàng Tin nhắn khởi động lại
- 7. Hàng đợi JMS nhận được tin nhắn?
- 8. SignalR - Gửi tin nhắn OnConnected
- 9. Thứ tự thời gian của tin nhắn
- 10. Gửi tin nhắn đến khách hàng cụ thể với socket.io và hàng đợi tin nhắn rỗng
- 11. Tin nhắn được sao chép GCM
- 12. Cách gửi một tin nhắn bằng Nhắn tin Firebase
- 13. Tin nhắn hộp thư không được gửi
- 14. Bảo quản tin nhắn JSF sau khi chuyển hướng
- 15. Làm thế nào để đảm bảo gửi tin nhắn với cần tây?
- 16. Gửi và nhận tin nhắn SOAP
- 17. Gửi tin nhắn SMS/Tin nhắn văn bản qua PHP
- 18. không nhận được tin nhắn ngay cả khi đặt ưu tiên cao nhất và được cài đặt trước tiên
- 19. Gửi tin nhắn sms dài
- 20. Hiển thị tin nhắn sau khi cài đặt Gói
- 21. Thứ tự tin nhắn trong socket.io
- 22. CQRS - Thời điểm gửi tin nhắn xác nhận?
- 23. Đã nhận được tin nhắn bưu điện
- 24. Nhận tin nhắn WhatsApp
- 25. tin nhắn hiển thị django sau biểu mẫu POST gửi
- 26. Không thể gửi tin nhắn tới FB
- 27. Lỗi khi gửi tin nhắn có liên kết đến Facebook
- 28. Tin nhắn Erlang/OTP có đáng tin cậy không? Tin nhắn có thể được sao chép không?
- 29. WebSocket đóng sau 1000 tin nhắn
- 30. GCM - Hiếm khi nhận được tin nhắn chủ đề
Tại sao bạn có nhiều nhà sản xuất khi nhà sản xuất (P2) luôn chờ nhà sản xuất trước đó (P1) lấy mã ACK? Làm thế nào để P1 và P2 giao tiếp? – cantSleepNow