Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vinascript/html/wp-includes/functions.php on line 6114
Tìm hiểu Rails Resque – Xử lý Jobs theo cơ chế hàng đợi trong Ruby on Rails - VinaScript

Latest Post

Triển khai dự án PHP, Mysql với Nginx trên Docker Tìm hiểu về HTML – Ưu điểm, nhược điểm và cách hoạt động của HTML

Giới thiệu Resque

Resque là một thư viện được phát triển bởi cộng đồng Ruby, sử dụng Redis để quản lý các tác vụ (jobs) trong ứng dụng Rails. Nó cho phép chúng ta xếp hàng các tác vụ và xử lý chúng một cách tuần tự. Resque là một dự án mã nguồn mở, và mã nguồn của nó có sẵn trên Github theo đường dẫn: https://github.com/resque/resque

Việc sử dụng hàng đợi (Queue) trong Resque có lý do của nó. Trong các dự án lớn, số lượng tác vụ cần thực hiện có thể rất lớn và không dễ dàng dự đoán được. Nếu chúng ta cố gắng xử lý tất cả chúng đồng thời, chúng ta sẽ cần sử dụng một lượng lớn tài nguyên máy chủ. Tuy nhiên, tài nguyên máy chủ thường có giới hạn.

Nếu chúng ta cố gắng xử lý tất cả các tác vụ mà không sử dụng hàng đợi, có thể gây ra tình trạng treo server và ứng dụng có thể ngừng hoạt động. Vì vậy, chúng ta sử dụng cơ chế hàng đợi để xử lý từng tác vụ một, đảm bảo rằng hệ thống hoạt động ổn định và không gặp sự cố nghiêm trọng.

Tích hợp Resque vào Rails

Tiền đề bài viết

  • Ruby on Rails 5.2 (Phiên bản mới nhất ở thời điểm bài viết này)
  • Đã được cài đặt Redis làm Backend xử lý Jobs.

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

Để lại một bình luậ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 *