pinky 0.2.11-java → 0.3.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -8
- data/lib/pinky/exceptions.rb +2 -2
- data/lib/pinky.rb +1 -0
- data/pinky.gemspec +1 -9
- metadata +1 -40
- data/lib/pinky/energizer_bunny/connection.rb +0 -94
- data/lib/pinky/energizer_bunny/subscription.rb +0 -54
data/Gemfile
CHANGED
@@ -7,14 +7,8 @@ source "http://rubygems.org"
|
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
|
9
9
|
gem 'httparty'
|
10
|
-
gem 'uuid', '2.3.6'
|
11
10
|
gem 'json'
|
12
11
|
|
13
|
-
platform :jruby do
|
14
|
-
# energizer
|
15
|
-
gem 'hot_bunnies'
|
16
|
-
end
|
17
|
-
|
18
12
|
group :test, :development do
|
19
13
|
#gem 'fakeweb'
|
20
14
|
gem 'timecop'
|
data/Gemfile.lock
CHANGED
@@ -3,7 +3,6 @@ GEM
|
|
3
3
|
specs:
|
4
4
|
diff-lcs (1.1.3)
|
5
5
|
git (1.2.5)
|
6
|
-
hot_bunnies (1.3.8-java)
|
7
6
|
httparty (0.9.0)
|
8
7
|
multi_json (~> 1.0)
|
9
8
|
multi_xml
|
@@ -14,8 +13,6 @@ GEM
|
|
14
13
|
rdoc
|
15
14
|
json (1.7.5)
|
16
15
|
json (1.7.5-java)
|
17
|
-
macaddr (1.6.1)
|
18
|
-
systemu (~> 2.5.0)
|
19
16
|
multi_json (1.3.6)
|
20
17
|
multi_xml (0.5.1)
|
21
18
|
rake (0.9.2.2)
|
@@ -29,10 +26,7 @@ GEM
|
|
29
26
|
rspec-expectations (2.11.3)
|
30
27
|
diff-lcs (~> 1.1.3)
|
31
28
|
rspec-mocks (2.11.3)
|
32
|
-
systemu (2.5.2)
|
33
29
|
timecop (0.5.2)
|
34
|
-
uuid (2.3.6)
|
35
|
-
macaddr (~> 1.0)
|
36
30
|
|
37
31
|
PLATFORMS
|
38
32
|
java
|
@@ -40,11 +34,9 @@ PLATFORMS
|
|
40
34
|
|
41
35
|
DEPENDENCIES
|
42
36
|
bundler (> 1.0.0)
|
43
|
-
hot_bunnies
|
44
37
|
httparty
|
45
38
|
jeweler (~> 1.8.4)
|
46
39
|
json
|
47
40
|
rdoc (~> 3.12)
|
48
41
|
rspec (>= 2.11.0)
|
49
42
|
timecop
|
50
|
-
uuid (= 2.3.6)
|
data/lib/pinky/exceptions.rb
CHANGED
data/lib/pinky.rb
CHANGED
data/pinky.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "pinky"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
s.platform = "java"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
@@ -29,8 +29,6 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/pinky.rb",
|
30
30
|
"lib/pinky/associations.rb",
|
31
31
|
"lib/pinky/cache.rb",
|
32
|
-
"lib/pinky/energizer_bunny/connection.rb",
|
33
|
-
"lib/pinky/energizer_bunny/subscription.rb",
|
34
32
|
"lib/pinky/exceptions.rb",
|
35
33
|
"lib/pinky/has_caches.rb",
|
36
34
|
"lib/pinky/model.rb",
|
@@ -54,9 +52,7 @@ Gem::Specification.new do |s|
|
|
54
52
|
|
55
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
54
|
s.add_runtime_dependency(%q<httparty>, [">= 0"])
|
57
|
-
s.add_runtime_dependency(%q<uuid>, ["= 2.3.6"])
|
58
55
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
59
|
-
s.add_runtime_dependency(%q<hot_bunnies>, [">= 0"])
|
60
56
|
s.add_development_dependency(%q<timecop>, [">= 0"])
|
61
57
|
s.add_development_dependency(%q<rspec>, [">= 2.11.0"])
|
62
58
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -64,9 +60,7 @@ Gem::Specification.new do |s|
|
|
64
60
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
65
61
|
else
|
66
62
|
s.add_dependency(%q<httparty>, [">= 0"])
|
67
|
-
s.add_dependency(%q<uuid>, ["= 2.3.6"])
|
68
63
|
s.add_dependency(%q<json>, [">= 0"])
|
69
|
-
s.add_dependency(%q<hot_bunnies>, [">= 0"])
|
70
64
|
s.add_dependency(%q<timecop>, [">= 0"])
|
71
65
|
s.add_dependency(%q<rspec>, [">= 2.11.0"])
|
72
66
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -75,9 +69,7 @@ Gem::Specification.new do |s|
|
|
75
69
|
end
|
76
70
|
else
|
77
71
|
s.add_dependency(%q<httparty>, [">= 0"])
|
78
|
-
s.add_dependency(%q<uuid>, ["= 2.3.6"])
|
79
72
|
s.add_dependency(%q<json>, [">= 0"])
|
80
|
-
s.add_dependency(%q<hot_bunnies>, [">= 0"])
|
81
73
|
s.add_dependency(%q<timecop>, [">= 0"])
|
82
74
|
s.add_dependency(%q<rspec>, [">= 2.11.0"])
|
83
75
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: pinky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Joel Friedman
|
@@ -29,22 +29,6 @@ dependencies:
|
|
29
29
|
none: false
|
30
30
|
prerelease: false
|
31
31
|
type: :runtime
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: uuid
|
34
|
-
version_requirements: !ruby/object:Gem::Requirement
|
35
|
-
requirements:
|
36
|
-
- - '='
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: 2.3.6
|
39
|
-
none: false
|
40
|
-
requirement: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- - '='
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 2.3.6
|
45
|
-
none: false
|
46
|
-
prerelease: false
|
47
|
-
type: :runtime
|
48
32
|
- !ruby/object:Gem::Dependency
|
49
33
|
name: json
|
50
34
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -63,24 +47,6 @@ dependencies:
|
|
63
47
|
none: false
|
64
48
|
prerelease: false
|
65
49
|
type: :runtime
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: hot_bunnies
|
68
|
-
version_requirements: !ruby/object:Gem::Requirement
|
69
|
-
requirements:
|
70
|
-
- - ! '>='
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: !binary |-
|
73
|
-
MA==
|
74
|
-
none: false
|
75
|
-
requirement: !ruby/object:Gem::Requirement
|
76
|
-
requirements:
|
77
|
-
- - ! '>='
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: !binary |-
|
80
|
-
MA==
|
81
|
-
none: false
|
82
|
-
prerelease: false
|
83
|
-
type: :runtime
|
84
50
|
- !ruby/object:Gem::Dependency
|
85
51
|
name: timecop
|
86
52
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -184,8 +150,6 @@ files:
|
|
184
150
|
- lib/pinky.rb
|
185
151
|
- lib/pinky/associations.rb
|
186
152
|
- lib/pinky/cache.rb
|
187
|
-
- lib/pinky/energizer_bunny/connection.rb
|
188
|
-
- lib/pinky/energizer_bunny/subscription.rb
|
189
153
|
- lib/pinky/exceptions.rb
|
190
154
|
- lib/pinky/has_caches.rb
|
191
155
|
- lib/pinky/model.rb
|
@@ -210,9 +174,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
210
174
|
- !ruby/object:Gem::Version
|
211
175
|
version: !binary |-
|
212
176
|
MA==
|
213
|
-
segments:
|
214
|
-
- 0
|
215
|
-
hash: 2
|
216
177
|
none: false
|
217
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
179
|
requirements:
|
@@ -1,94 +0,0 @@
|
|
1
|
-
require File.expand_path('../subscription', __FILE__)
|
2
|
-
|
3
|
-
module Pinky
|
4
|
-
module EnergizerBunny
|
5
|
-
class Connection
|
6
|
-
|
7
|
-
def initialize config, logger = Rails.logger
|
8
|
-
@config = config
|
9
|
-
@logger = logger
|
10
|
-
return unless enabled?
|
11
|
-
at_exit { close }
|
12
|
-
@exchanges = Hash.new { |exchanges, topic_key| exchanges[topic_key] = create_exchange topic_key }
|
13
|
-
@queues = Hash.new { |queues, topic_key| queues[topic_key] = create_queue topic_key }
|
14
|
-
@subscriptions = []
|
15
|
-
create_connection
|
16
|
-
end
|
17
|
-
|
18
|
-
def subscribe topic_key, subscription_opts = {}, &block
|
19
|
-
return unless enabled?
|
20
|
-
@subscriptions << Subscription.new(@queues[topic_key], subscription_opts, @logger, block)
|
21
|
-
end
|
22
|
-
|
23
|
-
def publish topic_key, message, opts = {}
|
24
|
-
add_message_id_to_header! opts
|
25
|
-
@exchanges[topic_key].publish message, opts if enabled?
|
26
|
-
end
|
27
|
-
|
28
|
-
def connected?
|
29
|
-
@connection && @connection.open?
|
30
|
-
end
|
31
|
-
|
32
|
-
def enabled?
|
33
|
-
@config[:enabled]
|
34
|
-
end
|
35
|
-
|
36
|
-
def connection_url
|
37
|
-
@config[:broker][:url]
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
def create_exchange topic_key
|
42
|
-
exchange_hash = @config[:exchanges][topic_key]
|
43
|
-
channel.exchange exchange_hash[:name], exchange_hash[:opts]
|
44
|
-
end
|
45
|
-
|
46
|
-
def create_connection
|
47
|
-
url = connection_url
|
48
|
-
raise Exception.new('Please set a broker url for RabbitMQ') if enabled? && url.nil?
|
49
|
-
@logger.info "Connecting bunny to: #{url}"
|
50
|
-
@connection = HotBunnies.connect :uri => url
|
51
|
-
end
|
52
|
-
|
53
|
-
#TODO: is having one channel bad, should this be one per exchange?
|
54
|
-
def channel
|
55
|
-
@channel ||= @connection.create_channel.tap { |c| c.prefetch = (@config.delete(:prefetch_count) || 1) }
|
56
|
-
end
|
57
|
-
|
58
|
-
def create_queue topic_key
|
59
|
-
queue_hash = @config[:queues][topic_key]
|
60
|
-
raise Exception.new("Cannot find queue configuration for queue: #{topic_key}") if queue_hash.nil?
|
61
|
-
queue_opts = queue_hash[:opts]
|
62
|
-
queue_opts[:durable] = true unless queue_opts.key? :durable
|
63
|
-
channel.queue(queue_hash[:name], queue_opts).tap do |queue|
|
64
|
-
queue_bind_opts = queue_hash[:bind_opts] || {}
|
65
|
-
Array(queue_hash[:bindings]).each do |binding|
|
66
|
-
binding_opts = queue_bind_opts.merge(binding[:binding_opts] || {})
|
67
|
-
queue.bind @exchanges[binding[:exchange_topic_key]], binding_opts
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def close
|
73
|
-
@logger.info 'Closing rabbit connection'
|
74
|
-
@subscriptions.each &:close
|
75
|
-
return unless connected?
|
76
|
-
if @channel
|
77
|
-
@channel.close
|
78
|
-
@channel = nil
|
79
|
-
end
|
80
|
-
@connection.close
|
81
|
-
@connection = nil
|
82
|
-
end
|
83
|
-
|
84
|
-
def add_message_id_to_header!(opts)
|
85
|
-
opts[:headers] ||= {}
|
86
|
-
opts[:headers]['message_id'] ||= guid_generator.generate
|
87
|
-
end
|
88
|
-
|
89
|
-
def guid_generator
|
90
|
-
@guid_generator ||= UUID.new
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
module Pinky
|
2
|
-
module EnergizerBunny
|
3
|
-
class Subscription
|
4
|
-
import java.util.concurrent.Executors
|
5
|
-
|
6
|
-
def initialize queue, subscription_opts, logger, handle_message
|
7
|
-
@queue, @subscription_opts, @logger, @handle_message = queue, subscription_opts.dup, logger, handle_message
|
8
|
-
@reraise_errors = @subscription_opts.delete(:reraise_errors)
|
9
|
-
@subscription_opts[:executor] = executor unless @subscription_opts[:executor]
|
10
|
-
listen!
|
11
|
-
end
|
12
|
-
|
13
|
-
def close
|
14
|
-
close_executor
|
15
|
-
return if @subscription.nil?
|
16
|
-
@subscription.shutdown!
|
17
|
-
@subscription = nil
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
def listen!
|
22
|
-
@subscription = @queue.subscribe(@subscription_opts) do |headers, msg|
|
23
|
-
begin
|
24
|
-
@handle_message.call headers.properties.headers, msg
|
25
|
-
headers.ack
|
26
|
-
rescue => e
|
27
|
-
@logger.error "!!!Error handling message: #{e.message}"
|
28
|
-
headers.reject
|
29
|
-
raise if @reraise_errors
|
30
|
-
end
|
31
|
-
end
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
def log_error e
|
36
|
-
@logger.error "An error has occured on another thread: #{e}#{$/}#{e.backtrace}"
|
37
|
-
end
|
38
|
-
|
39
|
-
def thread_pool_size
|
40
|
-
@thread_pool_size ||= (@subscription_opts.delete(:thread_pool_size) || 1)
|
41
|
-
end
|
42
|
-
|
43
|
-
def executor
|
44
|
-
@executor ||= Executors.new_fixed_thread_pool(thread_pool_size)
|
45
|
-
end
|
46
|
-
|
47
|
-
def close_executor
|
48
|
-
return unless @executor
|
49
|
-
@executor.shutdown_now
|
50
|
-
@executor = nil
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|