BackgroundWorker on Rails 4.2 – Part 2: Custom with Sucher Punch

Tiếp tục với bài viết trước, hôm nay mình sẽ trình bày về ActiveJob trong Rails 4.2 và việc sử dụng BackgroundWorker- SuckerPunch trên Rails.

ActiveJob

Là khái niệm xuất hiện từ Rails 4.2, được thiết kế để có một thể thống nhất sử dụng các BackgroundWorker được dễ dàng hơn.

Xem chi tiết tại: ActiveJob

ActiveJob khi được tạo sẽ nằm trong thư mục app/jobs

Để tạo 1 activejob sử dụng lệnh hoặc tạo bằng tay vào thư mục trên:

Như một job mình tạo ở đây sẽ có dạng như sau:

Một số cách dùng (cách nói thông thường, theo đúng của nó là các cách để add 1 công việc vào để worker thực hiện)

Cách worker thực hiện:

Các bạn phải set woker nào thực hiện việc này thông thường như các worker mình đã giới thiệu trước đó.

Nếu như không có woker làm việc được cài đặt và cấu hình thì mọi lệnh đều được thực thi theo tình tự bình thường.

Một số callback của ActiveJob và ví dụ:

Ngoài ra còn một số lưu ý khác bạn nên xem tại link của activejob.

Sucker Punch:

Nhiều bạn đã biết về các BackgroudWoker sẽ tự hỏi tại sao mình lại giới thiệu về thèn này mà không phải là các tên tuổi khác.

Đơn giản mình xin trả lời vì không phải dự án nào cũng thoải mái về tài nguyên mà chúng ta có thể chạy nhiều thứ trên cùng 1 vps or etc.

Về cơ bản sau khi đọc và tìm hiểu thì sucker punch có nhiều cái đáp ứng được các yêu cầu của mình cho dự án, bên cạnh đó nó cũng sử dụng bên trong 1 vài tool khá tốt như: Celluloid (Sidekiq cũng sử dụng) – Đây là framework trên ruby được viết để lý các vấn đề với multithread rất tốt. và quan trọng hơn là nó chạy cũng không tốn quá nhiều tài nguyên, bên cạnh đó là cài đặt hết sức dễ dàng.

Bundle install -> Xong.

Các bạn cùng xem đoạn code mình đã viết ở trên, miêu tả sơ qua công việc của mình đã viết trên đó. Mình có viết 1 hàm để log lại hệ thống trước mỗi action được thực hiện.

Nó sẽ diễn ra theo dưới log như sau:

Qua ví dụ mình đưa bạn thấy rằng hệ thống sẽ nhẹ đi nhiều và thời gian đáp ứng sẽ giảm được phần nào vì không phải thực hiện việc insert dữ liệu log trước khi thực hiện việc chính.

Đó là việc vì sao chúng ta cần dùng BackgroudWorker cho ứng dụng.

Nếu còn điều gì không rõ các bạn có thể comment để mọi người cùng giải đáp hoặc thảo luận.

Thân,

 

1 Response

  1. May 6, 2015

    […] để 1 job (Active Job) chạy như thế nào vui lòng xem bài viết sucker_punch để xem cách tạo job trên Rails […]

     

Leave a Reply