delayed_rabbit 0.1.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +104 -18
- data/delayed_rabbit.gemspec +7 -5
- data/lib/delayed_rabbit/railtie.rb +35 -0
- data/lib/delayed_rabbit/version.rb +1 -1
- data/lib/delayed_rabbit.rb +34 -1
- data/lib/generators/delayed_rabbit/install/templates/initializer.rb +30 -0
- data/lib/generators/delayed_rabbit/install/templates/rabbitmq.yml +44 -0
- data/lib/generators/delayed_rabbit/install_generator.rb +17 -0
- metadata +44 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66189b91092000fe55f71ff901f90ffcd208deccc57d819fdc389010db465928
|
4
|
+
data.tar.gz: 8c845d00436f5a5f5d521aface9f97b5941a904937a473710f7f975a4d6562af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e06ed9cfb919d2bf9d7b08e36422c03f87275d599e51638211b5cd0f4f2c739ec1554b7f6ce7fe27ba1c9cb39c2d81e5f38f96552252c92ac50c63a9242dd68
|
7
|
+
data.tar.gz: 816d0d49023b58081a7e9ddf8c681ce6d0d742c962b5620c658ec8a48d9b87bc42d2ea900d3d41db3b3ba52c5bf412d76c2919cb1ccdeaba81b5bf7cbc360d51
|
data/README.md
CHANGED
@@ -51,36 +51,122 @@ Or install it yourself as:
|
|
51
51
|
gem install delayed_rabbit
|
52
52
|
```
|
53
53
|
|
54
|
-
##
|
54
|
+
## Rails Integration
|
55
55
|
|
56
|
-
###
|
56
|
+
### 1. Install the Gem
|
57
|
+
|
58
|
+
Add to your Gemfile:
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
gem 'delayed_rabbit'
|
62
|
+
```
|
63
|
+
|
64
|
+
### 2. Run the Installer
|
65
|
+
|
66
|
+
Run the generator to set up configuration files:
|
67
|
+
|
68
|
+
```bash
|
69
|
+
rails generate delayed_rabbit:install
|
70
|
+
```
|
71
|
+
|
72
|
+
This will create:
|
73
|
+
- `config/initializers/delayed_rabbit.rb` - Main configuration file
|
74
|
+
- `config/rabbitmq.yml` - Environment-specific RabbitMQ settings
|
75
|
+
|
76
|
+
### 3. Configure RabbitMQ
|
77
|
+
|
78
|
+
Edit `config/rabbitmq.yml` with your RabbitMQ settings:
|
79
|
+
|
80
|
+
```yaml
|
81
|
+
development:
|
82
|
+
host: localhost
|
83
|
+
port: 5672
|
84
|
+
user: guest
|
85
|
+
password: guest
|
86
|
+
vhost: /
|
87
|
+
|
88
|
+
production:
|
89
|
+
host: <%= ENV['RABBITMQ_HOST'] %>
|
90
|
+
port: <%= ENV['RABBITMQ_PORT'] || 5672 %>
|
91
|
+
user: <%= ENV['RABBITMQ_USER'] %>
|
92
|
+
password: <%= ENV['RABBITMQ_PASSWORD'] %>
|
93
|
+
vhost: <%= ENV['RABBITMQ_VHOST'] || '/' %>
|
94
|
+
```
|
95
|
+
|
96
|
+
### 4. Use in Your Application
|
97
|
+
|
98
|
+
#### In Models/Services
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
class UserNotifier
|
102
|
+
def self.send_welcome_notification(user)
|
103
|
+
DelayedRabbit::JobPublisher.publish(
|
104
|
+
{
|
105
|
+
type: "welcome_email",
|
106
|
+
user_id: user.id,
|
107
|
+
email: user.email
|
108
|
+
},
|
109
|
+
delay_ms: 5000, # 5 seconds delay
|
110
|
+
routing_key: "notifications.welcome"
|
111
|
+
)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
```
|
115
|
+
|
116
|
+
#### In Controllers
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
class UsersController < ApplicationController
|
120
|
+
def create
|
121
|
+
user = User.create(user_params)
|
122
|
+
UserNotifier.send_welcome_notification(user)
|
123
|
+
redirect_to root_path, notice: 'User created successfully'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
128
|
+
#### Using Rake Tasks
|
129
|
+
|
130
|
+
The gem provides a rake task for testing:
|
131
|
+
|
132
|
+
```bash
|
133
|
+
# Enqueue a test job with 5 second delay
|
134
|
+
bundle exec rake delayed_rabbit:enqueue_test_job[5000]
|
135
|
+
|
136
|
+
# Enqueue a notification job
|
137
|
+
bundle exec rake jobs:enqueue_notification[5000,123]
|
138
|
+
```
|
139
|
+
|
140
|
+
## Usage (Non-Rails)
|
141
|
+
|
142
|
+
If you're not using Rails:
|
57
143
|
|
58
144
|
```ruby
|
59
145
|
require 'delayed_rabbit'
|
60
146
|
|
61
|
-
#
|
62
|
-
|
63
|
-
connection_options
|
147
|
+
# Configure manually
|
148
|
+
DelayedRabbit.configure do |config|
|
149
|
+
config.connection_options = {
|
64
150
|
host: "localhost",
|
65
151
|
port: 5672,
|
66
152
|
user: "guest",
|
67
|
-
password: "guest"
|
68
|
-
vhost: "/"
|
153
|
+
password: "guest"
|
69
154
|
}
|
70
|
-
|
155
|
+
end
|
71
156
|
|
72
|
-
#
|
73
|
-
|
74
|
-
type: "email_notification",
|
75
|
-
recipient: "user@example.com",
|
76
|
-
subject: "Delayed Email",
|
77
|
-
body: "This email was sent after a delay"
|
78
|
-
}
|
157
|
+
# Create a publisher
|
158
|
+
publisher = DelayedRabbit::JobPublisher.new
|
79
159
|
|
80
|
-
# Publish
|
81
|
-
publisher.publish(
|
160
|
+
# Publish a job
|
161
|
+
publisher.publish(
|
162
|
+
{
|
163
|
+
type: "email_notification",
|
164
|
+
recipient: "user@example.com"
|
165
|
+
},
|
166
|
+
delay_ms: 5000
|
167
|
+
)
|
82
168
|
|
83
|
-
# Close
|
169
|
+
# Close connection
|
84
170
|
publisher.close
|
85
171
|
```
|
86
172
|
|
data/delayed_rabbit.gemspec
CHANGED
@@ -3,12 +3,12 @@ require_relative "lib/delayed_rabbit/version"
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "delayed_rabbit"
|
5
5
|
spec.version = DelayedRabbit::VERSION
|
6
|
-
spec.authors = ["
|
7
|
-
spec.email = ["
|
6
|
+
spec.authors = ["ShekharBora"]
|
7
|
+
spec.email = ["chandu42011@gmail.com"]
|
8
8
|
|
9
9
|
spec.summary = "A lightweight Ruby gem for scheduling delayed background jobs using RabbitMQ"
|
10
10
|
spec.description = "delayed_rabbit provides a simple interface for scheduling background jobs with delays using RabbitMQ's delayed message exchange plugin"
|
11
|
-
spec.homepage = "https://github.com/
|
11
|
+
spec.homepage = "https://github.com/shekharbora/delayed_rabbit"
|
12
12
|
spec.license = "MIT"
|
13
13
|
spec.required_ruby_version = "~> 3.2"
|
14
14
|
|
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
|
|
31
31
|
# Development dependencies
|
32
32
|
spec.add_development_dependency "bundler", "~> 2.0"
|
33
33
|
spec.add_development_dependency "rake", "~> 13.0"
|
34
|
-
spec.add_development_dependency "
|
35
|
-
spec.add_development_dependency "
|
34
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
35
|
+
spec.add_development_dependency "mocha", "~> 1.14"
|
36
|
+
spec.add_development_dependency "byebug"
|
37
|
+
spec.add_development_dependency "rails", ">= 6.0.0"
|
36
38
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "delayed_rabbit"
|
2
|
+
|
3
|
+
module DelayedRabbit
|
4
|
+
class Railtie < Rails::Railtie
|
5
|
+
config.after_initialize do
|
6
|
+
DelayedRabbit.configure do |config|
|
7
|
+
config.connection_options = {
|
8
|
+
host: Rails.application.config_for(:rabbitmq)&.dig(:host) || "localhost",
|
9
|
+
port: Rails.application.config_for(:rabbitmq)&.dig(:port) || 5672,
|
10
|
+
user: Rails.application.config_for(:rabbitmq)&.dig(:user) || "guest",
|
11
|
+
password: Rails.application.config_for(:rabbitmq)&.dig(:password) || "guest",
|
12
|
+
vhost: Rails.application.config_for(:rabbitmq)&.dig(:vhost) || "/"
|
13
|
+
}
|
14
|
+
|
15
|
+
config.exchange_options = {
|
16
|
+
type: Rails.application.config_for(:rabbitmq)&.dig(:exchange_type) || "x-delayed-message",
|
17
|
+
durable: true,
|
18
|
+
arguments: {"x-delayed-type" => "topic"}
|
19
|
+
}
|
20
|
+
|
21
|
+
config.queue_options = {
|
22
|
+
durable: true,
|
23
|
+
arguments: {
|
24
|
+
"x-dead-letter-exchange" => "delayed_jobs",
|
25
|
+
"x-dead-letter-routing-key" => "delayed_jobs"
|
26
|
+
}
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
rake_tasks do
|
32
|
+
load "tasks/delayed_rabbit.rake"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/delayed_rabbit.rb
CHANGED
@@ -1,6 +1,39 @@
|
|
1
1
|
require "delayed_rabbit/version"
|
2
2
|
require "delayed_rabbit/job_publisher"
|
3
|
+
require "delayed_rabbit/railtie" if defined?(Rails)
|
3
4
|
|
4
5
|
module DelayedRabbit
|
5
|
-
|
6
|
+
class << self
|
7
|
+
attr_accessor :configuration
|
8
|
+
|
9
|
+
def configure
|
10
|
+
self.configuration ||= Configuration.new
|
11
|
+
yield(configuration) if block_given?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Configuration
|
16
|
+
attr_accessor :connection_options, :exchange_options, :queue_options
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@connection_options = {
|
20
|
+
host: "localhost",
|
21
|
+
port: 5672,
|
22
|
+
user: "guest",
|
23
|
+
password: "guest"
|
24
|
+
}
|
25
|
+
@exchange_options = {
|
26
|
+
type: "x-delayed-message",
|
27
|
+
durable: true,
|
28
|
+
arguments: {"x-delayed-type" => "topic"}
|
29
|
+
}
|
30
|
+
@queue_options = {
|
31
|
+
durable: true,
|
32
|
+
arguments: {
|
33
|
+
"x-dead-letter-exchange" => "delayed_jobs",
|
34
|
+
"x-dead-letter-routing-key" => "delayed_jobs"
|
35
|
+
}
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
6
39
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Configure Delayed Rabbit
|
2
|
+
DelayedRabbit.configure do |config|
|
3
|
+
# Connection settings
|
4
|
+
config.connection_options = {
|
5
|
+
host: ENV['RABBITMQ_HOST'] || "localhost",
|
6
|
+
port: ENV['RABBITMQ_PORT'] || 5672,
|
7
|
+
user: ENV['RABBITMQ_USER'] || "guest",
|
8
|
+
password: ENV['RABBITMQ_PASSWORD'] || "guest",
|
9
|
+
vhost: ENV['RABBITMQ_VHOST'] || "/",
|
10
|
+
automatic_recovery: true,
|
11
|
+
network_recovery_interval: 10
|
12
|
+
}
|
13
|
+
|
14
|
+
# Exchange settings
|
15
|
+
config.exchange_options = {
|
16
|
+
type: "x-delayed-message",
|
17
|
+
durable: true,
|
18
|
+
arguments: {"x-delayed-type" => "topic"}
|
19
|
+
}
|
20
|
+
|
21
|
+
# Queue settings
|
22
|
+
config.queue_options = {
|
23
|
+
durable: true,
|
24
|
+
arguments: {
|
25
|
+
"x-dead-letter-exchange" => "delayed_jobs",
|
26
|
+
"x-dead-letter-routing-key" => "delayed_jobs",
|
27
|
+
"x-message-ttl" => 3600000 # 1 hour TTL
|
28
|
+
}
|
29
|
+
}
|
30
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
development:
|
2
|
+
host: localhost
|
3
|
+
port: 5672
|
4
|
+
user: guest
|
5
|
+
password: guest
|
6
|
+
vhost: /
|
7
|
+
exchange_type: x-delayed-message
|
8
|
+
|
9
|
+
# Optional settings
|
10
|
+
automatic_recovery: true
|
11
|
+
network_recovery_interval: 10
|
12
|
+
|
13
|
+
# Queue settings
|
14
|
+
message_ttl: 3600000 # 1 hour TTL
|
15
|
+
|
16
|
+
test:
|
17
|
+
host: localhost
|
18
|
+
port: 5672
|
19
|
+
user: guest
|
20
|
+
password: guest
|
21
|
+
vhost: /
|
22
|
+
exchange_type: x-delayed-message
|
23
|
+
|
24
|
+
# Optional settings
|
25
|
+
automatic_recovery: false
|
26
|
+
network_recovery_interval: 10
|
27
|
+
|
28
|
+
# Queue settings
|
29
|
+
message_ttl: 3600000 # 1 hour TTL
|
30
|
+
|
31
|
+
production:
|
32
|
+
host: <%= ENV['RABBITMQ_HOST'] %>
|
33
|
+
port: <%= ENV['RABBITMQ_PORT'] || 5672 %>
|
34
|
+
user: <%= ENV['RABBITMQ_USER'] %>
|
35
|
+
password: <%= ENV['RABBITMQ_PASSWORD'] %>
|
36
|
+
vhost: <%= ENV['RABBITMQ_VHOST'] || '/' %>
|
37
|
+
exchange_type: x-delayed-message
|
38
|
+
|
39
|
+
# Optional settings
|
40
|
+
automatic_recovery: true
|
41
|
+
network_recovery_interval: 10
|
42
|
+
|
43
|
+
# Queue settings
|
44
|
+
message_ttl: 3600000 # 1 hour TTL
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "rails/generators"
|
2
|
+
|
3
|
+
module DelayedRabbit
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("templates", __dir__)
|
7
|
+
|
8
|
+
def copy_initializer
|
9
|
+
template "initializer.rb", "config/initializers/delayed_rabbit.rb"
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_rabbitmq_config
|
13
|
+
template "rabbitmq.yml", "config/rabbitmq.yml"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_rabbit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- ShekharBora
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-06-
|
11
|
+
date: 2025-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|
@@ -53,21 +53,35 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '5.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '5.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: mocha
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.14'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.14'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: byebug
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -80,10 +94,24 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rails
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 6.0.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 6.0.0
|
83
111
|
description: delayed_rabbit provides a simple interface for scheduling background
|
84
112
|
jobs with delays using RabbitMQ's delayed message exchange plugin
|
85
113
|
email:
|
86
|
-
-
|
114
|
+
- chandu42011@gmail.com
|
87
115
|
executables: []
|
88
116
|
extensions: []
|
89
117
|
extra_rdoc_files: []
|
@@ -93,16 +121,20 @@ files:
|
|
93
121
|
- example.rb
|
94
122
|
- lib/delayed_rabbit.rb
|
95
123
|
- lib/delayed_rabbit/job_publisher.rb
|
124
|
+
- lib/delayed_rabbit/railtie.rb
|
96
125
|
- lib/delayed_rabbit/version.rb
|
126
|
+
- lib/generators/delayed_rabbit/install/templates/initializer.rb
|
127
|
+
- lib/generators/delayed_rabbit/install/templates/rabbitmq.yml
|
128
|
+
- lib/generators/delayed_rabbit/install_generator.rb
|
97
129
|
- tasks/delayed_rabbit.rake
|
98
|
-
homepage: https://github.com/
|
130
|
+
homepage: https://github.com/shekharbora/delayed_rabbit
|
99
131
|
licenses:
|
100
132
|
- MIT
|
101
133
|
metadata:
|
102
134
|
allowed_push_host: https://rubygems.org
|
103
|
-
homepage_uri: https://github.com/
|
104
|
-
source_code_uri: https://github.com/
|
105
|
-
changelog_uri: https://github.com/
|
135
|
+
homepage_uri: https://github.com/shekharbora/delayed_rabbit
|
136
|
+
source_code_uri: https://github.com/shekharbora/delayed_rabbit
|
137
|
+
changelog_uri: https://github.com/shekharbora/delayed_rabbit/blob/master/CHANGELOG.md
|
106
138
|
post_install_message:
|
107
139
|
rdoc_options: []
|
108
140
|
require_paths:
|