run_rabbit_run 0.0.4 → 0.0.5
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.
- data/README.md +96 -1
- data/lib/run_rabbit_run/master.rb +4 -4
- data/lib/run_rabbit_run/processes/base.rb +6 -0
- data/lib/run_rabbit_run/rabbitmq.rb +2 -2
- data/lib/run_rabbit_run/version.rb +1 -1
- data/lib/run_rabbit_run/workers.rb +4 -4
- data/spec/dummy/config/rrr.rb +0 -2
- data/spec/dummy/workers/worker_name_1.rb +4 -3
- data/spec/dummy/workers/worker_name_3.rb +4 -2
- metadata +2 -2
data/README.md
CHANGED
@@ -18,7 +18,102 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
|
22
|
+
### Including the rake tasks
|
23
|
+
|
24
|
+
Require the rake tasks in your **Rakefile**
|
25
|
+
|
26
|
+
require "run_rabbit_run/tasks"
|
27
|
+
|
28
|
+
#### Rake tasks
|
29
|
+
|
30
|
+
```console
|
31
|
+
RAKE_ENV=production bundle exec rake rrr:start
|
32
|
+
```
|
33
|
+
|
34
|
+
Starts the master process and it starts all worker processes for **production** environment (default is **development**).
|
35
|
+
|
36
|
+
```console
|
37
|
+
bundle exec rake rrr:stop
|
38
|
+
```
|
39
|
+
|
40
|
+
Stops the master process. Master process sends **QUIT** signal to workers and waits for 5 seconds. If processes are still running the master kills them.
|
41
|
+
|
42
|
+
```console
|
43
|
+
bundle exec rake rrr:reload
|
44
|
+
```
|
45
|
+
|
46
|
+
Master stops all workers and then starts the profile again.
|
47
|
+
|
48
|
+
```console
|
49
|
+
bundle exec rake rrr:worker:add[worker_name]
|
50
|
+
```
|
51
|
+
|
52
|
+
Master runs new process for given worker.
|
53
|
+
|
54
|
+
```console
|
55
|
+
bundle exec rake rrr:worker:remove[worker_name]
|
56
|
+
```
|
57
|
+
|
58
|
+
Master stops one worker process.
|
59
|
+
|
60
|
+
### Configuration
|
61
|
+
|
62
|
+
you need to create __config/rrr.rb__ file to set your config variables
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
log "log/run_rabbit_run.log"
|
66
|
+
pid "tmp/pids/run_rabbit_run.pid"
|
67
|
+
|
68
|
+
worker :worker1, 'workers/worker_name_1.rb', processes: 0
|
69
|
+
worker :worker2, 'workers/worker_name_2.rb', processes: 2
|
70
|
+
worker :worker3, 'workers/worker_name_3.rb', processes: 1
|
71
|
+
```
|
72
|
+
|
73
|
+
* **log** sets path to log file
|
74
|
+
* **pid** sets path to pid file
|
75
|
+
* **worker** sets settings for worker. The first argument is the worker name. The second argument is the path to the worker ruby file. And you can pass options as a third parameter. The **processes** option sets the process count for worker, default is 1. If process count is 0 then no processes will be run, you can run the process by `bundle exec rake rrr:worker:add[worker_name]`.
|
76
|
+
|
77
|
+
Another config file you need to create is configuration file for environment eg. **config/rrr/development.rb** or **config/rrr/production.rb**
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
run :worker1, :worker2
|
81
|
+
|
82
|
+
```
|
83
|
+
**run** points the workers which will be run for the environment. In this case it will run only `worker1` and `worker2` but exlude the `worker3`.
|
84
|
+
|
85
|
+
### Creating worker
|
86
|
+
|
87
|
+
This is the "Hello world" worker. It creates **test_queue**, sends simple message to this queue, subscribes to the same queue and prints it into log file.
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
test_queue = channel.queue('test_queue', auto_delete: false)
|
91
|
+
|
92
|
+
publish(test_queue, {some: 'data'})
|
93
|
+
|
94
|
+
subscribe(test_queue) do | header, data |
|
95
|
+
RunRabbitRun.logger.info data.inspect
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
Sometimes we need to have workers which does something and shuts down. For example send some messages and end the process. It is possible if you set `processes` to **zero** for the worker in config file and run `stop` command at the end of the worker script file. If the `processes` count is set to number bigger than **0** then master will run the process again after it finishes.
|
100
|
+
|
101
|
+
__config/rrr.rb__
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
# ... some code
|
105
|
+
worker :worker1, 'workers/worker_name_1.rb', processes: 0
|
106
|
+
# ... some code
|
107
|
+
```
|
108
|
+
__workers/worker_name_1.rb__
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
test_queue = channel.queue('test_queue', auto_delete: false)
|
112
|
+
|
113
|
+
publish(test_queue, {some: 'data'})
|
114
|
+
|
115
|
+
stop
|
116
|
+
```
|
22
117
|
|
23
118
|
## Contributing
|
24
119
|
|
@@ -12,19 +12,19 @@ module RunRabbitRun
|
|
12
12
|
@master_process ||= begin
|
13
13
|
master = RunRabbitRun::Processes::Master.new
|
14
14
|
master.pid = Pid.pid
|
15
|
-
|
15
|
+
|
16
16
|
master
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def start
|
21
21
|
master_process.start do
|
22
22
|
workers = RunRabbitRun::Workers.new
|
23
23
|
workers.start
|
24
24
|
|
25
|
-
add_periodic_timer
|
25
|
+
add_periodic_timer 5 do
|
26
26
|
begin
|
27
|
-
workers.check unless exiting?
|
27
|
+
workers.check unless exiting? || starting?
|
28
28
|
rescue => e
|
29
29
|
RunRabbitRun.logger.error e.message
|
30
30
|
end
|
@@ -49,6 +49,8 @@ module RunRabbitRun
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
@starting = false
|
52
54
|
end
|
53
55
|
|
54
56
|
RunRabbitRun.logger.info "[#{@name}] process finished"
|
@@ -58,6 +60,10 @@ module RunRabbitRun
|
|
58
60
|
|
59
61
|
end
|
60
62
|
|
63
|
+
def starting?
|
64
|
+
@starting ||= true
|
65
|
+
end
|
66
|
+
|
61
67
|
def exiting?
|
62
68
|
@exiting ||= false
|
63
69
|
end
|
@@ -4,7 +4,7 @@ module RunRabbitRun
|
|
4
4
|
module Rabbitmq
|
5
5
|
class Base
|
6
6
|
include RunRabbitRun::Callbacks
|
7
|
-
|
7
|
+
|
8
8
|
define_callback :on_message_received
|
9
9
|
define_callback :on_message_processed
|
10
10
|
|
@@ -12,7 +12,7 @@ module RunRabbitRun
|
|
12
12
|
opts = options.dup
|
13
13
|
time_logging = opts.delete(:time_logging) || false
|
14
14
|
|
15
|
-
queue.subscribe do | header, payload |
|
15
|
+
queue.subscribe(options) do | header, payload |
|
16
16
|
RunRabbitRun.logger.info "[#{queue.name}] [#{Time.now.to_f}] started" if time_logging
|
17
17
|
call_callback :on_message_received, queue
|
18
18
|
|
@@ -19,15 +19,15 @@ module RunRabbitRun
|
|
19
19
|
def check
|
20
20
|
@workers.each do | name, workers |
|
21
21
|
processes = RunRabbitRun.config[:workers][name][:processes]
|
22
|
-
|
22
|
+
|
23
23
|
workers.each do | guid, worker |
|
24
|
-
|
24
|
+
if worker.pid && worker.pid > 0 && !worker.running?
|
25
25
|
if processes == 0
|
26
26
|
@workers[name].delete(guid)
|
27
27
|
else
|
28
28
|
worker.run
|
29
29
|
end
|
30
|
-
end
|
30
|
+
end
|
31
31
|
end
|
32
32
|
diff = processes - workers.size
|
33
33
|
diff.times{ run_new_worker name } if diff > 0
|
@@ -73,7 +73,7 @@ module RunRabbitRun
|
|
73
73
|
def stop
|
74
74
|
# try to stop gracefully
|
75
75
|
@workers.each { | name, workers | workers.each { | guid, worker | worker.stop } }
|
76
|
-
|
76
|
+
|
77
77
|
sleep 1
|
78
78
|
|
79
79
|
@workers.each do | name, workers |
|
data/spec/dummy/config/rrr.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
output = channel.queue('output', auto_delete: false)
|
2
|
-
input = channel.queue('input', auto_delete: false)
|
1
|
+
output = channel.queue('output', durable: true, auto_delete: false)
|
2
|
+
input = channel.queue('input', durable: true, auto_delete: false)
|
3
3
|
|
4
4
|
publish(output, {some: 'data'})
|
5
5
|
|
@@ -8,6 +8,7 @@ subscribe(output, time_logging: true) do | header, data |
|
|
8
8
|
publish(input, {received: 'data'})
|
9
9
|
end
|
10
10
|
|
11
|
-
subscribe(input) do | header, data |
|
11
|
+
subscribe(input, ack: true) do | header, data |
|
12
12
|
RunRabbitRun.logger.info data.inspect
|
13
|
+
header.ack
|
13
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: run_rabbit_run
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|