UNPKG

bqueue

Version:

Reliable, distributed batch message processing using Redis

1 lines 1.87 kB
{"getBatch":"local call = redis.call\nlocal queue = KEYS[1]\nlocal maxBatchSize = tonumber(ARGV[1])\nlocal processingTimeout = tonumber(ARGV[2])\nlocal queueKey = '{' .. queue .. '}:messages'\nlocal processingKey = '{' .. queue .. '}:processing'\nlocal messages = {}\nfor i = 1, maxBatchSize do\n local id = call('RPOPLPUSH', queueKey, processingKey)\n if not id then\n return messages\n end\n local messageKey = queueKey .. ':' .. id\n local messageProcessingKey = messageKey .. ':processing'\n local message = call('GET', messageKey)\n messages[#messages + 1] = message\n call('PSETEX', messageProcessingKey, processingTimeout, 1)\nend\nreturn messages\n","reinsertUnprocessed":"local call = redis.call\nlocal queue = KEYS[1]\nlocal maxMessages = tonumber(ARGV[1])\nlocal queueKey = '{' .. queue .. '}:messages'\nlocal processingKey = '{' .. queue .. '}:processing'\nlocal processingMessages = call('LRANGE', processingKey, 0 - maxMessages, -1)\nlocal ids = {}\nfor i = 1, #processingMessages do\n local id = processingMessages[i]\n local messageProcessingKey = queueKey .. ':' .. id .. ':processing'\n local stillProcessing = call('EXISTS', messageProcessingKey)\n if stillProcessing == 0 then\n ids[#ids + 1] = id\n call('RPUSH', queueKey, id)\n call('LREM', processingKey, -1, id)\n else\n return ids\n end\nend\nreturn ids\n","removeMessages":"local call = redis.call\nlocal queue = KEYS[1]\nlocal messages = ARGV\nlocal queueKey = '{' .. queue .. '}:messages' .. ':'\nlocal processingKey = '{' .. queue .. '}:processing'\nfor i = 1, #messages do\n local id = messages[i]\n local count = call('LREM', processingKey, -1, id)\n if count == 1 then\n local messageKey = queueKey .. id\n local messageProcessingKey = messageKey .. ':processing'\n call('DEL', messageKey, messageProcessingKey)\n end\nend\nreturn messages\n"}