rflow-components-amqp 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/lib/rflow/components/amqp/subscriber.rb +20 -2
- data/lib/rflow/components/amqp/version.rb +1 -1
- data/rflow-components-amqp.gemspec +2 -1
- metadata +25 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72ceb11aa78801df45de0137699f3b72d2a16c52
|
4
|
+
data.tar.gz: 92994ff04ab11f0612033b81517940bec8ec486e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f907324d9cb0c7bd0d980670f32a0e3b70391aed7b9601b47f7fba1599108aaaba5392b422c9dce5db537d7724f1d91542a105cb0a8a77f029d0cf00da102180
|
7
|
+
data.tar.gz: 319b3c6b80cc890bfad382e40d5ac7f430d0e97416dd337402399f7e0aead7e702e973a30f422f829624b372023bfbe48900ddcca2c85393f1114c1ee16f6168
|
data/.travis.yml
CHANGED
@@ -8,6 +8,7 @@ rvm:
|
|
8
8
|
before_install:
|
9
9
|
- sudo apt-get install libtool autoconf automake uuid-dev build-essential
|
10
10
|
- wget http://download.zeromq.org/zeromq-3.2.4.tar.gz && tar zxvf zeromq-3.2.4.tar.gz && cd zeromq-3.2.4 && ./configure && make && sudo make install && cd ..
|
11
|
+
- gem update bundler
|
11
12
|
# Only has 4.0.4, need 3.2 version due to old em-zeromq
|
12
13
|
# - sudo add-apt-repository -y ppa:chris-lea/zeromq
|
13
14
|
# - sudo apt-get update
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'eventmachine'
|
2
2
|
require 'amqp'
|
3
3
|
require 'rflow'
|
4
|
+
require 'time'
|
4
5
|
|
5
6
|
class RFlow
|
6
7
|
module Components
|
@@ -11,6 +12,7 @@ class RFlow
|
|
11
12
|
class Subscriber < RFlow::Component
|
12
13
|
output_port :amqp_port
|
13
14
|
output_port :raw_port
|
15
|
+
output_port :log_port
|
14
16
|
|
15
17
|
attr_accessor :config, :queue_config
|
16
18
|
|
@@ -20,6 +22,7 @@ class RFlow
|
|
20
22
|
'username' => 'guest',
|
21
23
|
'password' => 'guest',
|
22
24
|
'vhost' => '/',
|
25
|
+
'reconnect_interval' => 20,
|
23
26
|
|
24
27
|
'queue_name' => 'asdf',
|
25
28
|
'queue_passive' => false,
|
@@ -33,6 +36,7 @@ class RFlow
|
|
33
36
|
def configure!(config)
|
34
37
|
@config = DEFAULT_CONFIG.merge config
|
35
38
|
@config['port'] = @config['port'].to_i
|
39
|
+
@config['reconnect_interval'] = @config['reconnect_interval'].to_i
|
36
40
|
|
37
41
|
['durable', 'passive', 'exclusive', 'auto_delete'].each do |opt|
|
38
42
|
@config["queue_#{opt}"] = to_boolean(@config["queue_#{opt}"])
|
@@ -48,18 +52,32 @@ class RFlow
|
|
48
52
|
end
|
49
53
|
|
50
54
|
def run!
|
51
|
-
::AMQP.connect(:host => @config['server'], :port => @config['port'], :vhost => @config['vhost'],
|
55
|
+
::AMQP.connect(:host => @config['server'], :port => @config['port'], :vhost => @config['vhost'],
|
56
|
+
:username => @config['username'], :password => @config['password']) do |conn|
|
52
57
|
@amqp_connection = conn
|
58
|
+
RFlow.logger.info 'Connected to AMQP server...'
|
59
|
+
|
60
|
+
conn.on_disconnection do
|
61
|
+
RFlow.logger.error 'AMQP disconnected. Reconnecting...'
|
62
|
+
log_port.send_message(RFlow::Message.new('RFlow::Message::Data::Log').tap do |m|
|
63
|
+
m.data.timestamp = Integer(Time.now.to_f * 1000) # ms since epoch
|
64
|
+
m.data.level = 'INFO'
|
65
|
+
m.data.text = "AMQP disconnected. Reconnecting in #{@config['reconnect_interval']} seconds."
|
66
|
+
end)
|
67
|
+
|
68
|
+
EventMachine::Timer.new(@config['reconnect_interval']) { run! }
|
69
|
+
end
|
53
70
|
|
54
71
|
::AMQP::Channel.new(@amqp_connection) do |channel|
|
55
72
|
@amqp_channel = channel
|
73
|
+
channel.auto_recovery = true
|
56
74
|
@amqp_exchange = @amqp_channel.topic
|
57
75
|
|
58
76
|
::AMQP::Queue.new(@amqp_channel, @config['queue_name'], @queue_config) do |queue|
|
59
77
|
@amqp_queue = queue
|
60
78
|
@amqp_queue.bind(@amqp_exchange, :routing_key => @config['binding_pattern']).subscribe(:ack => true) do |header, payload|
|
61
79
|
RFlow.logger.debug { "#{name}: AMQP message received" }
|
62
|
-
processing_event = RFlow::Message::ProcessingEvent.new(
|
80
|
+
processing_event = RFlow::Message::ProcessingEvent.new(uuid, Time.now.utc).tap do |e|
|
63
81
|
e.completed_at = Time.now.utc
|
64
82
|
end
|
65
83
|
|
@@ -21,8 +21,9 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
24
|
-
s.add_dependency 'rflow', '~> 1.
|
24
|
+
s.add_dependency 'rflow', '~> 1.1', '>= 1.1.1'
|
25
25
|
s.add_dependency 'amqp', '>= 0.8.0'
|
26
|
+
s.add_dependency 'amq-protocol', '< 2.0' # until Ruby 2.0 compatibility is achieved
|
26
27
|
|
27
28
|
s.add_development_dependency 'rspec', '~> 3.0'
|
28
29
|
s.add_development_dependency 'rspec-collection_matchers', '~> 1.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rflow-components-amqp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael L. Artz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rflow
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: '1.1'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.1.1
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
29
|
+
version: '1.1'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.1.1
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: amqp
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +44,20 @@ dependencies:
|
|
38
44
|
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
46
|
version: 0.8.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: amq-protocol
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "<"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "<"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.0'
|
41
61
|
- !ruby/object:Gem::Dependency
|
42
62
|
name: rspec
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
146
|
version: '0'
|
127
147
|
requirements: []
|
128
148
|
rubyforge_project: rflow-components-amqp
|
129
|
-
rubygems_version: 2.
|
149
|
+
rubygems_version: 2.2.2
|
130
150
|
signing_key:
|
131
151
|
specification_version: 4
|
132
152
|
summary: AMQP publisher and subscriber component for the RFlow FBP framework
|