Dữ liệu lõiCông việc nền

Hàng đợi công việc

Hàng đợi FIFO không làm mất công việc khi một worker chết, với producer và consumer chạy song song.

LPUSH/giây có pipeline, đã đo
31.6M
công việc bị mất khi sập
0
lần thăm dò
0
Bước 1 trên 5
Producer đẩy công việc

Bất kỳ dịch vụ nào cũng thêm việc mà không phải chờ consumer.

Phiên ví dụplaying
# Producer đẩy công việc
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

Một hướng dẫn minh họa động với các lệnh HotKV thật và phản hồi ví dụ. Nhấn vào bất kỳ bước nào để nhảy tới đó. Lệnh và phản hồi giữ nguyên bằng tiếng Anh, đúng như bạn gõ và thấy trong HotKV.

Vấn đề

Công việc nền như email, đổi kích thước ảnh và webhook cần một hàng đợi giữa mã tạo ra nó và mã thực hiện nó. Một hàng đợi làm mất công việc khi worker sập giữa chừng còn tệ hơn không có hàng đợi, vì không ai nhận ra công việc đã biến mất.

HotKV xử lý như thế nào

List cho bạn một hàng đợi FIFO đơn giản. BLMOVE chuyển mỗi công việc sang một danh sách xử lý khi nó được giao cho một worker, nên một công việc đang thực hiện luôn được lưu ở đâu đó nếu worker đó biến mất. Producer và consumer được phục vụ bởi các luồng worker song song.

Từng bước một

Điều gì xảy ra, từng lệnh một

  1. 01

    Producer đẩy công việc

    Bất kỳ dịch vụ nào cũng thêm việc mà không phải chờ consumer.

    LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  2. 02

    Một worker nhận công việc an toàn

    BLMOVE chặn cho đến khi có công việc, rồi chuyển nó sang một danh sách xử lý trong một bước.

    BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0
  3. 03

    Xác nhận khi xong

    Email đã được gửi đi. Công việc bị xóa khỏi danh sách xử lý.

    LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  4. 04

    Một worker sập

    Worker 2 chết giữa chừng. Công việc của nó vẫn nằm trong danh sách xử lý, không bị mất.

    LRANGE queue:emails:processing 0 -1
  5. 05

    Đưa lại vào hàng đợi và tiếp tục

    Một trình giám sát chuyển công việc bị bỏ dở về hàng đợi và một worker khác nhận nó.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
Phù hợp ở đâu

Các tình huống thực tế

Email và SMS giao dịch

Tin nhắn đăng ký, biên nhận và đặt lại được ứng dụng web xếp hàng và được một nhóm worker gửi đi.

Xử lý phương tiện

Các tệp tải lên được xếp hàng để tạo ảnh thu nhỏ và chuyển mã, và một trình chuyển mã bị sập không bao giờ làm rơi một tệp.

Gửi webhook

Webhook gửi đi được xếp hàng và thử lại mà không chặn yêu cầu đã kích hoạt chúng.

Tích hợp sẵn

Bạn nhận được gì

FIFO với đọc chặn

LPUSH với BRPOP, và worker ngủ cho đến khi có việc.

LPUSHBRPOP

Không mất công việc

BLMOVE giao mỗi công việc vào một danh sách xử lý một cách nguyên tử.

BLMOVELREM

Producer và consumer song song

Producer và consumer được phục vụ bởi các luồng worker song song.

Cần nhiều hơn?

Với xác nhận, nhóm consumer và phát lại, hãy dùng stream.

XADDXREADGROUP

Câu hỏi thường gặp

Điều gì xảy ra với một công việc nếu worker sập?

Nếu bạn nhận công việc bằng BLMOVE, công việc nằm trong danh sách xử lý. Một trình giám sát có thể chuyển mọi thứ ở đó quá lâu về hàng đợi.

Worker có phải thăm dò không?

Không. BRPOP và BLMOVE chặn cho đến khi có công việc đến, với thời gian chờ tùy chọn.

List hay stream?

List là hàng đợi đơn giản nhất. Stream bổ sung nhóm consumer, xác nhận theo từng thông điệp và lịch sử. Xem trường hợp sử dụng truyền sự kiện.

Trường hợp sử dụng liên quan

Thử trên khối lượng công việc của chính bạn

HotKV nói giao thức Redis, nên bạn có thể trỏ một client hiện có tới nó và chạy chính những lệnh này.