Skip to content

Design a Distributed Job Queue, stage 7 of 9: break it

Write the worker loop

Write the loop each worker runs for one job type. The queue supports leases, acknowledgements, delayed retries and a dead-letter queue.

System so far· 7 parts
123456SERVICEWeb serversSERVICEEnqueue gatewayLOG / STREAMKafkaWORKERRelayQUEUERedis queuesWORKERWorkersDATABASEDatabasesand services

Select a component to see what it is responsible for and which state it owns.

  1. 1Web servers → Enqueue gateway: Enqueue job
  2. 2Enqueue gateway → Kafka: Append to topic
  3. 3Relay → Kafka: Read topics
  4. 4Relay → Redis queues: Push at a controlled rate
  5. 5Workers → Redis queues: Lease jobs
  6. 6Workers → Databases and services: Do the work

What you need to know

0 of 3 checks done
  1. A worker loop handles one job at a time, and each job ends in exactly one of these ways:

    OutcomeWhenQueue call
    Donethe handler succeededack
    Retry laterit failed, attempts remainretryLater with a delay
    Dead letterit failed too many timesdeadLetter
    Expiredit's too old to matterack without running
  2. Check

    Where should the acknowledgement go?