Slide 1

Slide 1 text

RESQUE /ˈrɛskyu/

Slide 2

Slide 2 text

J 4228 700+ forks defunktocat defunkt/resque

Slide 3

Slide 3 text

DelayedJob SQS Starling ActiveMessaging BackgroundJob Beanskalkd RESQUE

Slide 4

Slide 4 text

Background jobs JSON pending jobs in Redis Ruby multiples Queues Persistents Workers Classes that respond to `perform`

Slide 5

Slide 5 text

# lib/resque/archive.rb class Archive @queue = :file_serve def self.perform(repo_id, branch = 'master') repo = Repository.find(repo_id) repo.create_archive(branch) end end # app/models/repository.rb class Repository def async_create_archive(branch) Resque.enqueue(Archive, self.id, branch) end end

Slide 6

Slide 6 text

RESQUE-WEB

Slide 7

Slide 7 text

Steve Klabnik "Yet Another GitHub Project They've Open Sourced and Then Abandoned." But Resque is super awesome [...] http://blog.steveklabnik.com/posts/2012-09-22-resque--let-s-do-this

Slide 8

Slide 8 text

Fresc | Smart Images Feedback RESQUE 5 workers 10+ ≠ queues

Slide 9

Slide 9 text

Asynchronous manipulation upload to CDN Emails delivering Images PDF reports generation ...

Slide 10

Slide 10 text

plugins resque-scheduler resque-retry resque-mailer resque-lock

Slide 11

Slide 11 text

daily_digest: cron: "0 */24 * * *" class: Digest description: "The one time a day activity digest" args: [1] bidaily_digest: cron: "0 */12 * * *" class: Digest description: "The two time a day activity digest" args: [2] instant_digest: cron: "*/5 * * * *" class: Digest description: "Send each 5 minuts a digest" args: [3]

Slide 12

Slide 12 text

module UploadImageToCdn extend Resque::Plugins::ExponentialBackoff @queue = :cdn_upload @backoff_strategy = [0, 0, 0, 0.5, 1, 2, 5, 10] def perform( image_id ) # ... end extend self end

Slide 13

Slide 13 text

class UserMailer < ActionMailer::Base include Resque::Mailer # ... end

Slide 14

Slide 14 text

require 'resque/plugins/lock' module SummarizeProject extend Resque::Plugins::Lock @queue = :summarize_project def perform( gallery_id ) gallery = Gallery.find( gallery_id ) gallery.summarize end extend self end

Slide 15

Slide 15 text

Run | development ★ rake task to start workers

Slide 16

Slide 16 text

Run | production ★ Configure Upstart to auto-restart workers when they are down. ★ Capistrano deploy hook to shutdown running workers. after "deploy:create_symlink", "deploy:stop_resque"

Slide 17

Slide 17 text

@robinkomiwes [email protected]