消息队列

产生消息

$redis LPUSH queue $message

消费消息

set message [$redis LPOP queue]
dispatch $message

容错处理

set message [$redis LPOP queue]

try {
  dispatch $message
} on error err {
  $redis LPUSH queue $message
}

RPOPLPUSH

set message [$redis RPOPLPUSH queue processing]
dispatch $message
$redis LREM queue 0 $message

cron idle {
  purge queue processing
}

用 MySql 实现消息队列

CREATE TABLE task_queue (
  created_at DATETIME,
  updated_at DATETIME,
  retry_times INT,
  message TEXT
)
SELECT * FROM task_queue
WHERE 1
ORDER BY created_at ASC
LIMIT 1