Worker Glass
WorkerGlass provides optional timeout and after failure (reentrancy) for background processing worker engines (like Sidekiq, Resque, etc).
Reentrancy
If you don't know what is reentrancy, you can read about it here.
Setup
If you want to use timeout and/or reentrancy, please add appropriate modules into your worker.
WorkerGlass allows to configure following options:
| Method | Arguments | Description |
|---|---|---|
| self.logger= | Logger | Set logger which will be used by Worker Glass (if not defined, null logger will be used) |
Usage
WorkerGlass has few submodules that you can prepend to your workers to obtain given functionalities:
| Module | Description |
|---|---|
| WorkerGlass::Reentrancy | Provides additional reentrancy layer if anything goes wrong |
| WorkerGlass::Timeout | Allows to set a timeout after which a given worker task will fail |
WorkerGlass::Timeout
If you want to provide timeouts for your workers, just prepend WorkerGlass::Timeout to your worker and set the timeout value:
class Worker2
prepend WorkerGlass::Timeout
self.timeout = 60 # 1 minute timeout
def perform(first_param, second_param, third_param)
SomeService.new.process(first_param, second_param, third_param)
end
end
Worker2.perform_async(example1, example2, example3)
WorkerGlass::Reentrancy
If you want to provide reentrancy for your workers, just prepend WorkerGlass::Reentrancy to your worker and define after_failure method that will be executed uppon failure:
class Worker3
prepend WorkerGlass::Reentrancy
def perform(first_param, second_param, third_param)
SomeService.new.process(first_param, second_param, third_param)
end
def after_failure(first_param, second_param, third_param)
SomeService.new.reset_state(first_param, second_param, third_param)
end
end
Worker3.perform_async(example1, example2, example3)
References
- Sidekiq
- Karafka framework
- Waterdrop
- Worker Glass
- Envlogic
- Null Logger
- Worker Glass Travis CI
- Worker Glass Code Climate
Note on Patches/Pull Requests
Fork the project. Make your feature addition or bug fix. Add tests for it. This is important so I don't break it in a future version unintentionally. Commit, do not mess with Rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull). Send me a pull request. Bonus points for topic branches.
Each pull request must pass our quality requirements. To check if everything is as it should be, we use PolishGeeks Dev Tools that combine multiple linters and code analyzers. Please run:
bundle exec rake
to check if everything is in order. After that you can submit a pull request.