Tôi đang cố gắng thiết kế cơ chế phát lại cho phép người dùng phát lại tin nhắn từ hàng đợi. Việc thiết kế tốt nhất mà tôi đã đưa ra cho một cuộc trao đổi có chứa nhiều hàng đợi và nhiều người tiêu dùng là:Rabbitmq- Thiết kế dịch vụ phát lại tin nhắn
Tạo một dịch vụ ghi rằng sẽ:
- Tạo một danh sách và ràng buộc tất cả các phím định tuyến để nó .
- Tiêu thụ tất cả thư từ trao đổi.
- Lưu tất cả thư vào DB.
Yêu cầu đăng ký phát lại.
- Mỗi người đăng ký tạo một trao đổi, xếp hàng mới và liên kết với nó với cùng một ràng buộc như hàng đợi thông thường.
- Người đăng ký gửi yêu cầu còn lại tới máy chủ web để bắt đầu phát lại bằng bộ lọc (bắt đầu, v.v ...). Yêu cầu chứa tên trao đổi phát lại của nó.
- Máy chủ web lấy dữ liệu từ DB và xuất bản dữ liệu đó đến trao đổi cụ thể
- sàng lọc có thể được thêm như đính kèm RequestId và lặp lại nó.
Câu hỏi:
1. Việc đó có ý nghĩa?
2. Tôi có phát minh ra bánh xe không? Có một giải pháp vốn có của thỏ không? cắm vào?
3. Việc tạo nhiều trao đổi có được coi là thực hành tốt không?
Trong trao đổi giải pháp này cho mỗi hàng đợi được tạo để xuất bản cùng một thông điệp.
Một giải pháp khác:
1. Tạo hàng đợi bổ sung "ReplayQueue" cho mỗi hàng đợi. đặt TTL (giả sử một tháng).
2. Mỗi khi người dùng yêu cầu phát lại, hãy để anh phát lại từ ReplayQueue của riêng mình mà không cần nhấn.
Giải pháp này có vấn đề một chút vì.
- Để phát lại ngày hôm qua, người tiêu dùng sẽ phải tìm nạp tất cả 29 ngày trước đó và lọc chúng ra.
- Giải pháp này tăng lên - Hàng đợi sẽ lớn hơn (không giống như bộ nhớ db có thể mở rộng).
Toàn bộ câu hỏi có vẻ khá dựa vào ý kiến trong khi không có bất kỳ yêu cầu cụ thể rất khó để trả lời bất kỳ câu hỏi phụ của bạn. Ứng dụng của bạn có phải là thời gian thực không? Hàng đợi giải quyết vấn đề gì? Bạn có cần hàng đợi không? Bạn có cần truy cập vào các thông điệp bên trong hàng đợi (hàng đợi truy cập ngẫu nhiên) không? – pinepain