Redis-based job queues are the standard for background processing. Arctickey supports all major queue libraries.
The most popular Node.js queue library:
npm install bullmq
import { Queue, Worker } from 'bullmq'; const connection = { host: 'YOUR_INSTANCE.eu.arctickey.com', port: 6379, password: 'YOUR_PASSWORD', tls: {}, }; // Create a queue const emailQueue = new Queue('emails', { connection }); // Add a job await emailQueue.add('welcome', { to: 'user@example.com', subject: 'Welcome!', template: 'welcome', }); // Add with options await emailQueue.add('reminder', { userId: '123' }, { delay: 60000, // 1 minute delay attempts: 3, // Retry 3 times backoff: { type: 'exponential', delay: 1000, }, } );
const worker = new Worker('emails', async (job) => { console.log(`Processing ${job.name} job ${job.id}`); switch (job.name) { case 'welcome': await sendWelcomeEmail(job.data); break; case 'reminder': await sendReminder(job.data); break; } }, { connection }); worker.on('completed', (job) => { console.log(`Job ${job.id} completed`); }); worker.on('failed', (job, err) => { console.error(`Job ${job?.id} failed:`, err); });
// Run every day at 9 AM await emailQueue.add( 'daily-digest', {}, { repeat: { pattern: '0 9 * * *', tz: 'Europe/Stockholm', }, } );
Configure Sidekiq to use Arctickey:
# config/initializers/sidekiq.rb Sidekiq.configure_server do |config| config.redis = { url: 'rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379', ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } } end Sidekiq.configure_client do |config| config.redis = { url: 'rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379', ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } } end
# app/workers/email_worker.rb class EmailWorker include Sidekiq::Worker sidekiq_options retry: 3, queue: 'default' def perform(user_id, template) user = User.find(user_id) UserMailer.send(template, user).deliver_now end end # Enqueue a job EmailWorker.perform_async(user.id, 'welcome') # Schedule for later EmailWorker.perform_in(1.hour, user.id, 'reminder')
Configure Redis queues in Laravel:
// config/database.php 'redis' => [ 'client' => 'predis', 'default' => [ 'url' => env('REDIS_URL'), 'scheme' => 'tls', ], 'queue' => [ 'url' => env('REDIS_URL'), 'scheme' => 'tls', ], ],
REDIS_URL=rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379 QUEUE_CONNECTION=redis
// Create a job php artisan make:job ProcessPayment // app/Jobs/ProcessPayment.php class ProcessPayment implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function __construct(public Order $order) {} public function handle() { // Process the payment PaymentGateway::charge($this->order); } } // Dispatch the job ProcessPayment::dispatch($order); // Delay dispatch ProcessPayment::dispatch($order)->delay(now()->addMinutes(10));
from redis import Redis from rq import Queue redis_conn = Redis( host='YOUR_INSTANCE.eu.arctickey.com', port=6379, password='YOUR_PASSWORD', ssl=True ) q = Queue(connection=redis_conn) # Enqueue a job job = q.enqueue(send_email, 'user@example.com', 'Welcome!') # Check job status print(job.get_status()) # queued, started, finished, failed
# celery.py from celery import Celery app = Celery( 'tasks', broker='rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379/0', backend='rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379/0', broker_use_ssl={'ssl_cert_reqs': 'CERT_NONE'}, redis_backend_use_ssl={'ssl_cert_reqs': 'CERT_NONE'} ) @app.task def send_email(to, subject): # Send the email pass # Call the task send_email.delay('user@example.com', 'Hello!')
Job Queues with Arctickey
Redis-based job queues are the standard for background processing. Arctickey supports all major queue libraries.
Why Redis for Queues?#
BullMQ (Node.js)#
The most popular Node.js queue library:
npm install bullmqimport { Queue, Worker } from 'bullmq'; const connection = { host: 'YOUR_INSTANCE.eu.arctickey.com', port: 6379, password: 'YOUR_PASSWORD', tls: {}, }; // Create a queue const emailQueue = new Queue('emails', { connection }); // Add a job await emailQueue.add('welcome', { to: 'user@example.com', subject: 'Welcome!', template: 'welcome', }); // Add with options await emailQueue.add('reminder', { userId: '123' }, { delay: 60000, // 1 minute delay attempts: 3, // Retry 3 times backoff: { type: 'exponential', delay: 1000, }, } );Processing Jobs#
const worker = new Worker('emails', async (job) => { console.log(`Processing ${job.name} job ${job.id}`); switch (job.name) { case 'welcome': await sendWelcomeEmail(job.data); break; case 'reminder': await sendReminder(job.data); break; } }, { connection }); worker.on('completed', (job) => { console.log(`Job ${job.id} completed`); }); worker.on('failed', (job, err) => { console.error(`Job ${job?.id} failed:`, err); });Scheduled Jobs (Cron)#
// Run every day at 9 AM await emailQueue.add( 'daily-digest', {}, { repeat: { pattern: '0 9 * * *', tz: 'Europe/Stockholm', }, } );Sidekiq (Ruby)#
Configure Sidekiq to use Arctickey:
# config/initializers/sidekiq.rb Sidekiq.configure_server do |config| config.redis = { url: 'rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379', ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } } end Sidekiq.configure_client do |config| config.redis = { url: 'rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379', ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } } endCreating Workers#
# app/workers/email_worker.rb class EmailWorker include Sidekiq::Worker sidekiq_options retry: 3, queue: 'default' def perform(user_id, template) user = User.find(user_id) UserMailer.send(template, user).deliver_now end end # Enqueue a job EmailWorker.perform_async(user.id, 'welcome') # Schedule for later EmailWorker.perform_in(1.hour, user.id, 'reminder')Laravel Queues#
Configure Redis queues in Laravel:
// config/database.php 'redis' => [ 'client' => 'predis', 'default' => [ 'url' => env('REDIS_URL'), 'scheme' => 'tls', ], 'queue' => [ 'url' => env('REDIS_URL'), 'scheme' => 'tls', ], ],REDIS_URL=rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379 QUEUE_CONNECTION=redisDispatching Jobs#
// Create a job php artisan make:job ProcessPayment // app/Jobs/ProcessPayment.php class ProcessPayment implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function __construct(public Order $order) {} public function handle() { // Process the payment PaymentGateway::charge($this->order); } } // Dispatch the job ProcessPayment::dispatch($order); // Delay dispatch ProcessPayment::dispatch($order)->delay(now()->addMinutes(10));Python (RQ / Celery)#
Redis Queue (RQ)#
from redis import Redis from rq import Queue redis_conn = Redis( host='YOUR_INSTANCE.eu.arctickey.com', port=6379, password='YOUR_PASSWORD', ssl=True ) q = Queue(connection=redis_conn) # Enqueue a job job = q.enqueue(send_email, 'user@example.com', 'Welcome!') # Check job status print(job.get_status()) # queued, started, finished, failedCelery#
# celery.py from celery import Celery app = Celery( 'tasks', broker='rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379/0', backend='rediss://:YOUR_PASSWORD@YOUR_INSTANCE.eu.arctickey.com:6379/0', broker_use_ssl={'ssl_cert_reqs': 'CERT_NONE'}, redis_backend_use_ssl={'ssl_cert_reqs': 'CERT_NONE'} ) @app.task def send_email(to, subject): # Send the email pass # Call the task send_email.delay('user@example.com', 'Hello!')Best Practices#