'ActiveJob::DispatchRider' adds DispatchRider
support for ActiveJob
.
Allow standard ActiveJob jobs to be run by Dispatch Rider.
Add this line to your application's Gemfile:
gem "activejob-dispatch_rider"
And then execute:
$ bundle
Or install it yourself as:
$ gem install activejob-dispatch_rider
Configure ActiveJob
and DispatchRider
.
# publisher app
# Set the ActiveJob's queue adapter
ActiveJob::Base.queue_adapter = :dispatch_rider
# Configure DispatchRider::Publisher as you would normally do
DispatchRider::Publisher.configure notification_services: { file_system: {} },
destinations: {
low_priority: {
service: :file_system,
channel: :low_priority,
options: { path: "tmp/queue/low" }
},
high_priority: {
service: :file_system,
channel: :high_priority,
options: { path: "tmp/queue/high" }
}
}
# subscriber app for low priority channel
DispatchRider.configure do |config|
config.queue_kind = "file_system"
config.queue_info = { path: "tmp/queue/low" }
end
# subscriber app for high priority channel
DispatchRider.configure do |config|
config.queue_kind = "file_system"
config.queue_info = { path: "tmp/queue/high" }
end
# config/application.rb
module YourApp
class Application < Rails::Application
# ...
config.active_job.queue_adapter = :dispatch_rider
# ...
end
end
# Configure DispatchRider::Publisher as you would normally do
# config/initializers/dispatch_rider.rb
DispatchRider::Publisher.configure notification_services: { file_system: {} },
destinations: {
low_priority: {
service: :file_system,
channel: :low_priority,
options: { path: "tmp/queue/low" }
},
high_priority: {
service: :file_system,
channel: :high_priority,
options: { path: "tmp/queue/high" }
}
}
# subscriber app for low priority channel
DispatchRider.configure do |config|
config.queue_kind = "file_system"
config.queue_info = { path: "tmp/queue/low" }
end
Once the preliminary setup is done create active jobs like you normally would.
Match the destination channel name of DispatchRider
with the queue name of
ActiveJob
.
# call_and_welcome_customer.rb
class CallAndWelcomeCustomer < ActiveJob::Base
queue_as :high_priority
def perform(customer, welcome_message:)
call_phone customer.phone_number
say welcome_message
# ...
end
# ...
end
To perform the job later enqueue it by calling .perform_later
.
CallAndWelcomeCustomer.perform_later Customer.find_by_name!("Smith"),
welcome_message: "Welcome Mr. Smith!"
- Fork it ( https://github.com/payrollhero/activejob-dispatch_rider/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Special thanks to those who contributed to this project. 😄