MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB như một dịch vụ hàng đợi?

Tôi đang sử dụng mongodb làm dịch vụ hàng đợi để gửi email. Ngay sau đó, nó sẽ hoạt động theo cách sau:

  1. Khi một tin nhắn mới đến, tôi lưu trữ nó trong mongodb.
  2. Sau đó, một công việc nền sẽ tải thông báo từ mongodb qua thao tác nguyên tử findAndModify và đặt cờ Processing thành true, vì vậy nó không xử lý cùng một thông báo hai lần (vì công việc nền của tôi chạy nhiều chuỗi song song).
  3. Sau khi email được gửi, tôi xóa tài liệu khỏi mongodb.
  4. Bạn cũng có thể giữ số lượng lỗi cho từng tin nhắn và xóa nó sau 3 lần không thành công.

Nói chung, tôi sử dụng mongodb làm dịch vụ xếp hàng chỉ vì một lý do:vì tôi cần gửi email theo lịch trình cụ thể (mỗi thư chứa thông tin về thời gian gửi).

Nếu bạn không có bất kỳ lịch trình nào và cần xử lý tin nhắn ngay lập tức, tôi khuyên bạn nên xem xét các dịch vụ hàng đợi hiện có, vì chúng có thể xử lý tất cả các trường hợp mà bạn có thể không thấy nếu không hiểu sâu hơn về hàng đợi tin nhắn.

Cập nhật

Khi công việc nền gặp sự cố trong quá trình xử lý thông báo, bạn có thể làm như sau:

  1. Di chuyển thư này sang thư khác, thu thập lỗi hàng đợi thư hoặc ..

  2. Tăng bộ đếm số lần xử lý trong thư và chỉ định lại trạng thái "Mới", để thử xử lý lại. Chỉ cần đảm bảo rằng công việc nền là không quan trọng (có thể xử lý cùng một thông báo nhiều lần và không làm hỏng dữ liệu) và giao dịch (khi công việc không thành công, bạn phải hoàn tác các thay đổi đã được thực hiện nếu có). Khi công việc không thành công sau 5 lần thử (giá trị cấu hình), hãy thực hiện # 1.

  3. Sau khi lỗi xử lý tin nhắn được sửa, bạn có thể xử lý lại nó một lần nữa bằng cách gán trạng thái "Mới" và chuyển đến hàng đợi tin nhắn hoặc chỉ cần xóa tin nhắn này. Nó phụ thuộc vào quy trình kinh doanh thực sự.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao MongoDB không sử dụng giao điểm chỉ mục?

  2. Chỉ trả về các phần tử tài liệu con đã khớp trong một mảng lồng nhau

  3. Sự khác biệt giữa save và insert trong Mongo DB là gì?

  4. cách nhóm trong mongoDB và trả về tất cả các trường trong kết quả

  5. Nodejs / Express - Khởi chạy ứng dụng của tôi:express.createServer () không được dùng nữa