workling 0.4.9.8 → 0.4.9.9
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/lib/workling.rb +1 -0
- data/lib/workling/clients/amqp_bunny_client.rb +59 -0
- data/lib/workling_daemon.rb +12 -1
- metadata +3 -2
data/lib/workling.rb
CHANGED
@@ -76,6 +76,7 @@ module Workling
|
|
76
76
|
def self.clients
|
77
77
|
{
|
78
78
|
'amqp' => Workling::Clients::AmqpClient,
|
79
|
+
'amqp_bunny' => Workling::Clients::AmqpBunnyClient,
|
79
80
|
'amqp_exchange' => Workling::Clients::AmqpExchangeClient,
|
80
81
|
'memcache' => Workling::Clients::MemcacheQueueClient,
|
81
82
|
'starling' => Workling::Clients::MemcacheQueueClient,
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#
|
2
|
+
# An AMQP client based on the synchrounous Bunny library which
|
3
|
+
# is easier to use in many situations
|
4
|
+
#
|
5
|
+
module Workling
|
6
|
+
module Clients
|
7
|
+
class AmqpBunnyClient < Workling::Clients::BrokerBase
|
8
|
+
|
9
|
+
def self.load
|
10
|
+
begin
|
11
|
+
require 'bunny'
|
12
|
+
rescue LoadError => e
|
13
|
+
raise WorklingError.new("WORKLING: couldn't find the bunny amqp client")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# starts the client.
|
18
|
+
def connect
|
19
|
+
begin
|
20
|
+
@bunny = Bunny.new((Workling.config[:amqp_options] ||{}).symbolize_keys)
|
21
|
+
@bunny.start
|
22
|
+
rescue
|
23
|
+
raise WorklingError.new("Couldn't start bunny amqp client, ensure the AMQP server is running.")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# no need for explicit closing. when the event loop
|
28
|
+
# terminates, the connection is closed anyway.
|
29
|
+
def close
|
30
|
+
@bunny.stop
|
31
|
+
# normal amqp does not require stopping
|
32
|
+
end
|
33
|
+
|
34
|
+
# subscribe to a queue
|
35
|
+
def subscribe(key)
|
36
|
+
@bunny.queue(queue_for(key)).subscribe(:timeout => 30) do |value|
|
37
|
+
data = Marshal.load(value) rescue value
|
38
|
+
yield data
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# request and retrieve work
|
43
|
+
def retrieve(key)
|
44
|
+
@bunny.queue(queue_for(key)).pop[:payload]
|
45
|
+
end
|
46
|
+
|
47
|
+
def request(key, value)
|
48
|
+
data = Marshal.dump(value)
|
49
|
+
@bunny.queue(queue_for(key)).publish(data)
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def queue_for(key)
|
54
|
+
"#{Workling.config[:prefix]}#{key}"
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/workling_daemon.rb
CHANGED
@@ -2,6 +2,15 @@ require 'optparse'
|
|
2
2
|
|
3
3
|
class WorklingDaemon
|
4
4
|
|
5
|
+
def self.running_as_daemon?
|
6
|
+
!!@running_as_daemon
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.run_as_daemon!
|
10
|
+
@running_as_daemon = true
|
11
|
+
end
|
12
|
+
|
13
|
+
|
5
14
|
def self.partition_options(args)
|
6
15
|
daemon = []
|
7
16
|
workling = []
|
@@ -92,6 +101,8 @@ class WorklingDaemon
|
|
92
101
|
|
93
102
|
|
94
103
|
def self.run(options)
|
104
|
+
WorklingDaemon.run_as_daemon!
|
105
|
+
|
95
106
|
boot_with options
|
96
107
|
poller = initialize_workling(options)
|
97
108
|
|
@@ -103,7 +114,7 @@ class WorklingDaemon
|
|
103
114
|
begin
|
104
115
|
poller.listen
|
105
116
|
ensure
|
106
|
-
puts '** No Worklings found.' if Workling::Discovery.
|
117
|
+
puts '** No Worklings found.' if Workling::Discovery.discovered_workers.empty?
|
107
118
|
puts '** Exiting'
|
108
119
|
end
|
109
120
|
end
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 0
|
7
7
|
- 4
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.4.9.
|
9
|
+
- 9
|
10
|
+
version: 0.4.9.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rany Keddo
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- lib/extensions/mattr_accessor.rb
|
37
37
|
- lib/workling/base.rb
|
38
38
|
- lib/workling/clients/amqp_client.rb
|
39
|
+
- lib/workling/clients/amqp_bunny_client.rb
|
39
40
|
- lib/workling/clients/amqp_exchange_client.rb
|
40
41
|
- lib/workling/clients/backgroundjob_client.rb
|
41
42
|
- lib/workling/clients/base.rb
|