background_bunnies 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module BackgroundBunnies
|
4
|
+
class Broadcaster
|
5
|
+
attr_reader :queue_name
|
6
|
+
attr_reader :connection
|
7
|
+
attr_reader :exchange
|
8
|
+
|
9
|
+
def initialize(connection_or_group, queue_name)
|
10
|
+
@connection = BackgroundBunnies.connect connection_or_group
|
11
|
+
@queue_name = queue_name.to_s
|
12
|
+
@channel = @connection.create_channel
|
13
|
+
@exchange = @channel.fanout(BackgroundBunnies.broadcast_exchange_name(queue_name))
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# Publishes a Job for the Worker
|
18
|
+
#
|
19
|
+
def enqueue(payload)
|
20
|
+
@exchange.publish(JSON.generate(payload))
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -1,13 +1,15 @@
|
|
1
1
|
require 'thread'
|
2
2
|
require 'bunny'
|
3
3
|
require 'amqp'
|
4
|
+
require 'socket'
|
5
|
+
|
4
6
|
require_relative 'job'
|
5
7
|
|
6
8
|
module BackgroundBunnies
|
7
9
|
module Bunny
|
10
|
+
DEFAULT_CONNECTION_OPTIONS = {:threaded=>true}
|
8
11
|
|
9
12
|
module BunnyConfigurators
|
10
|
-
DEFAULT_CONNECTION_OPTIONS = {:threaded=>true}
|
11
13
|
def group(group_name)
|
12
14
|
@group_name = group_name
|
13
15
|
end
|
@@ -16,6 +18,10 @@ module BackgroundBunnies
|
|
16
18
|
@queue_name = queue_name.to_s
|
17
19
|
end
|
18
20
|
|
21
|
+
def type(type)
|
22
|
+
@type = type
|
23
|
+
end
|
24
|
+
|
19
25
|
def group_name
|
20
26
|
@group_name || :default
|
21
27
|
end
|
@@ -24,6 +30,10 @@ module BackgroundBunnies
|
|
24
30
|
@queue_name || demodulized_class_name
|
25
31
|
end
|
26
32
|
|
33
|
+
def queue_type
|
34
|
+
@type || :queue
|
35
|
+
end
|
36
|
+
|
27
37
|
def connection_options
|
28
38
|
@connection_options || DEFAULT_CONNECTION_OPTIONS.dup
|
29
39
|
end
|
@@ -45,6 +55,10 @@ module BackgroundBunnies
|
|
45
55
|
BackgroundBunnies::Producer.new(connection, queue_name)
|
46
56
|
end
|
47
57
|
|
58
|
+
def create_broadcaster(connection)
|
59
|
+
BackgroundBunnies::Broadcaster.new(connection, queue_name)
|
60
|
+
end
|
61
|
+
|
48
62
|
end
|
49
63
|
|
50
64
|
def self.included(base)
|
@@ -58,6 +72,10 @@ module BackgroundBunnies
|
|
58
72
|
self.class.queue_name
|
59
73
|
end
|
60
74
|
|
75
|
+
def queue_type
|
76
|
+
self.class.queue_type
|
77
|
+
end
|
78
|
+
|
61
79
|
def connection_options
|
62
80
|
self.class.connection_options
|
63
81
|
end
|
@@ -74,7 +92,18 @@ module BackgroundBunnies
|
|
74
92
|
def start(connection_or_group)
|
75
93
|
@connection = connection_or_group
|
76
94
|
@channel = AMQP::Channel.new(@connection)
|
77
|
-
|
95
|
+
queue_options = {}
|
96
|
+
name = queue_name
|
97
|
+
if queue_type == :broadcast
|
98
|
+
queue_options[:exclusive] = true
|
99
|
+
queue_options[:auto_delete] = true
|
100
|
+
name = "#{Socket.gethostname}-#{Process.pid}-#{self.object_id}"
|
101
|
+
@queue = @channel.queue(name, queue_options)
|
102
|
+
@exchange = @channel.fanout(BackgroundBunnies.broadcast_exchange_name(queue_name))
|
103
|
+
@queue.bind(@exchange)
|
104
|
+
else
|
105
|
+
@queue = @channel.queue(queue_name, queue_options)
|
106
|
+
end
|
78
107
|
@consumer = @queue.subscribe(:ack=>true) do |metadata, payload|
|
79
108
|
info = metadata
|
80
109
|
properties = nil
|
data/lib/background_bunnies.rb
CHANGED
@@ -2,6 +2,7 @@ require "background_bunnies/version"
|
|
2
2
|
require "background_bunnies/logger"
|
3
3
|
require "background_bunnies/bunny"
|
4
4
|
require "background_bunnies/producer"
|
5
|
+
require "background_bunnies/broadcaster"
|
5
6
|
require "background_bunnies/job"
|
6
7
|
require "background_bunnies/workers"
|
7
8
|
require "thread"
|
@@ -12,6 +13,10 @@ module BackgroundBunnies
|
|
12
13
|
|
13
14
|
class << self
|
14
15
|
|
16
|
+
def broadcast_exchange_name(queue_name)
|
17
|
+
"bunnies.broadcasters.#{queue_name}"
|
18
|
+
end
|
19
|
+
|
15
20
|
#
|
16
21
|
# Group Connection Configurations
|
17
22
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: background_bunnies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
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-04-
|
12
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bunny
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- examples/increments_producer_reset.rb
|
94
94
|
- examples/increments_worker.rb
|
95
95
|
- lib/background_bunnies.rb
|
96
|
+
- lib/background_bunnies/broadcaster.rb
|
96
97
|
- lib/background_bunnies/bunny.rb
|
97
98
|
- lib/background_bunnies/job.rb
|
98
99
|
- lib/background_bunnies/logger.rb
|