[Ruby on Rails] Tìm hiểu Rails Resque – Xử lý Jobs theo cơ chế hàng đợi


Giới thiệu Resque

Resque là một thư viện Redis-backed được cộng đồng Ruby phát triển, hỗ trợ cho việc quản lý các jobs trong Rails, sắp xếp, tổ chức những jobs này vào hàng đợi (queue) và xử lí chúng lần lượt. Resque là một opensource. Mã nguồn được chia sẻ trên Github tại địa chỉ: https://github.com/resque/resque

Vì sao phải sử dụng hàng đợi (Queue)? Trong các dự án lớn, số lượng tác vụ (jobs) thực hiện là vô cùng, vô tận. Bạn khó có thể đoán chính xác được chúng có bao nhiêu và nếu xử lý đồng thời thì tài nguyên máy chủ cần sử dụng để xử lý là rất lớn. Trong khi đó, cấu hình server thường có giới hạn. Và điều không may mắn nếu phải xứ lý đồng thời các tác vụ thì sẽ dẫn đến server bị treo, ứng dựng sẽ ngừng phục vụ. Vì vậy, chúng ta sử dụng cơ chế hàng đợi để xử lý lần lượt các tác vụ.

Tích hợp Resque vào Rails

Tiền đề bài viết

1. Bổ sung thư viện Redis, và Resque vào Gemfile

Sửa file Gemfile của bạn, bổ sung nội dung bên dưới.

# Redis store
gem 'redis', '< 4'
gem 'redis-rails'
gem 'redis-store', '~> 1.4.0'

# Resque Redis
gem 'resque', require: 'resque/server'

Sau đó các bạn chạy lệnh sau để build gem

bundle update

Để kiểm tra lại gem đã cài đặt thành công chưa sử dụng command: bundle info resque

2. Cấu hình Resque Task

Sửa file Rakefile và thêm nội dung sau:

require 'resque/tasks'

task 'resque:setup' => :environment

Sửa file config/application.rb

module Eventlog
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.2

    # Be sure to have the adapter's gem in your Gemfile
    # and follow the adapter's specific installation
    # and deployment instructions.
    config.active_job.queue_adapter = :resque
  end
end

Sửa file app/jobs/application_jobs.rb

# frozen_string_literal: true

class ApplicationJob < ActiveJob::Base
  before_perform do |job|
    ActiveRecord::Base.clear_active_connections!
  end
end

3. Tạo mới một job sử dụng hàng đợi

Từ thư mục của project, sử dụng command bên dưới để tạo job

bin/rails generate job newsletter_subscriber --queue default

Sau khi chạy command, rails sẽ tạo ra file app/jobs/newsletter_subscriber_job.rb chưa nội dung xử lý Job

class NewsletterSubscriberJob < ApplicationJob
  queue_as :default

  def perform(*args)
    # Do something later (Xử lý job ở đây)
    puts args
  end
end

Để thêm 1 queue vào hàng đợi chèn đoạn code sau vào chương trình của bạn

NewsletterSubscriberJob.perform_later 'This is my job'

4. Xử lý hàng đợi ở Resque

Chạy command sau để thực thi hàng đợi

QUEUE=* rake resque:work

Nguồn: vinasupport.com

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web