Về cơ bản người tiêu dùng của tôi cũng là nhà sản xuất. Chúng tôi nhận được một tập dữ liệu ban đầu và nó được gửi đến hàng đợi. Một người tiêu dùng có một mục và xử lý nó, từ thời điểm đó có 3 khả năng:Có thể đảm bảo các thư duy nhất nằm trong hàng đợi thỏmq không?
- dữ liệu là tốt và được đặt một hàng đợi 'tốt' để lưu trữ
- dữ liệu là xấu và loại bỏ
- dữ liệu là không tốt (chưa) hoặc xấu (chưa) để dữ liệu được chia thành các phần nhỏ hơn và được gửi trở lại hàng đợi để xử lý tiếp.
Vấn đề của tôi là với bước 3, vì hàng đợi phát triển rất nhanh, có thể một phần dữ liệu được chia nhỏ thành một phần trùng lặp trong hàng đợi và người tiêu dùng tiếp tục xử lý và kết thúc một vòng lặp vô hạn.
Tôi nghĩ rằng cách ngăn chặn điều này là để ngăn các bản sao xâm nhập vào hàng đợi. Tôi không thể làm điều này ở phía khách hàng bởi vì trong một giờ tôi có thể có nhiều lõi xử lý hàng tỷ điểm dữ liệu (để mỗi khách hàng quét nó trước khi gửi sẽ làm chậm quá nhiều). Tôi nghĩ rằng điều này cần phải được thực hiện ở phía máy chủ nhưng, như tôi đã đề cập, dữ liệu là khá lớn và tôi không biết làm thế nào để đảm bảo hiệu quả không có bản sao.
Tôi có thể đang yêu cầu điều không thể nhưng tôi nghĩ rằng tôi sẽ chụp. bất kì ý kiến nào đều được đánh giá cao.
Tôi đang cố gắng làm chính xác điều đó (tôi nghĩ). Bằng cách đảm bảo không có mục trùng lặp nào trong các mục trước đây, tôi đảm bảo rằng cùng một dữ liệu không được xử lý nhiều lần. Tôi chỉ là chắc chắn của việc thực hiện trong rabbitmq, là có một cách để chỉ cần gửi id tin nhắn và có thỏmq loại bỏ bản sao hoặc tôi cần phải thiết lập một bộ lọc hoặc một cái gì đó (nếu tôi làm thế nào nó hoạt động với rabbitmq). –
Không có cách nào để làm điều đó, AFAIK. Thỏ không quan tâm đến nội dung của tin nhắn của bạn hoặc những gì đã có trong hàng đợi của bạn, do đó, nó sẽ được vào ứng dụng của bạn để chăm sóc này. –
Vì vậy, nếu ID tin nhắn của tôi là duy nhất (mã băm dữ liệu thực tế của tôi), tôi cần lưu trữ chúng trong một DB hoặc một cái gì đó và truy vấn ngược lại (để xem liệu ID thư đã được gửi trước đó) trước khi gửi đến thỏ? Tôi đã nghĩ về điều đó nhưng nó sẽ yêu cầu khách hàng thực hiện một vài truy vấn trong khi máy chủ tin nhắn của tôi đợi (tôi đang cố gắng xem liệu mình có thể đẩy công việc này đến máy chủ thư) –