gorg_service 3.0.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -2
- data/bin/console +4 -0
- data/bin/worker +17 -0
- data/lib/gorg_service/listener.rb +12 -35
- data/lib/gorg_service/rabbitmq_env_builder.rb +83 -0
- data/lib/gorg_service/version.rb +1 -1
- data/lib/gorg_service.rb +11 -4
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2796183c085588be8c61f098ff65fa089d47160d
|
4
|
+
data.tar.gz: fc992e99c193dd9cfd640d4c85cbdd928b4863c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2aabf7b5ac8302b358e165660a41959c1ad126c8c413e76d1f165b8484e1c8b4b0c5af719f20362d26b303c3ca759b3e7ba17d6f0f647bafa5fd05494205839a
|
7
|
+
data.tar.gz: 78a4a7ee82987bd195292186b9753511f9b0ff6782814eca3404c0f5da14ce1fc15a4d71276836116b8a239246a3ffd7276a3bacd7ce2f65e2039c781015a08a
|
data/.gitignore
CHANGED
data/bin/console
CHANGED
@@ -10,5 +10,9 @@ require "gorg_service"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
+
#You can add a file bin/env.rb to set convenience environment such as configuration
|
14
|
+
env_path=File.join(File.dirname(__FILE__),"/env.rb")
|
15
|
+
require env_path if File.file?(env_path)
|
16
|
+
|
13
17
|
require "irb"
|
14
18
|
IRB.start
|
data/bin/worker
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "gorg_service"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
#You should add a file bin/env.rb to set convenience environment such as configuration
|
14
|
+
env_path=File.join(File.dirname(__FILE__),"/env.rb")
|
15
|
+
require env_path if File.file?(env_path)
|
16
|
+
|
17
|
+
GorgService.new.run
|
@@ -6,25 +6,21 @@ require "bunny"
|
|
6
6
|
class GorgService
|
7
7
|
class Listener
|
8
8
|
|
9
|
-
def initialize(bunny_session: nil,
|
10
|
-
@queue_name=queue_name
|
11
|
-
@exchange_name=exchange_name
|
9
|
+
def initialize(bunny_session: nil, env: nil, message_handler_map: {default: DefaultMessageHandler}, max_attempts: 48,log_routing_key:nil)
|
12
10
|
@message_handler_map=message_handler_map
|
13
|
-
@deferred_time=deferred_time
|
14
11
|
@max_attempts=max_attempts
|
15
12
|
@rmq_connection=bunny_session
|
16
13
|
@log_routing_key=log_routing_key
|
17
|
-
end
|
18
14
|
|
19
|
-
|
15
|
+
@env=env
|
16
|
+
end
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
@q.subscribe(:manual_ack => true) do |delivery_info, _properties, body|
|
18
|
+
def listen
|
19
|
+
@env.job_queue.subscribe(:manual_ack => true) do |delivery_info, _properties, body|
|
24
20
|
routing_key=delivery_info[:routing_key]
|
25
21
|
GorgService.logger.info "Received message with routing key #{routing_key} containing : #{body}"
|
26
22
|
process_message(body,routing_key)
|
27
|
-
@ch.ack(delivery_info.delivery_tag)
|
23
|
+
@env.ch.ack(delivery_info.delivery_tag)
|
28
24
|
end
|
29
25
|
end
|
30
26
|
|
@@ -35,18 +31,6 @@ class GorgService
|
|
35
31
|
@rmq_connection
|
36
32
|
end
|
37
33
|
|
38
|
-
def set_rabbitmq_env
|
39
|
-
conn = rmq_connection
|
40
|
-
@ch = conn.create_channel
|
41
|
-
@ch.prefetch(1)
|
42
|
-
@ch.topic(@exchange_name, :durable => true)
|
43
|
-
@q = @ch.queue(@queue_name, :durable => true)
|
44
|
-
|
45
|
-
@message_handler_map.keys.each do |routing_key|
|
46
|
-
@q.bind(@exchange_name, :routing_key => routing_key)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
34
|
def process_message(body,routing_key)
|
51
35
|
message=nil
|
52
36
|
incomming_message_error_count=0
|
@@ -96,19 +80,12 @@ class GorgService
|
|
96
80
|
end
|
97
81
|
|
98
82
|
def send_to_deferred_queue(msg)
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
'x-message-ttl' => @deferred_time,
|
106
|
-
'x-dead-letter-exchange' => @exchange_name,
|
107
|
-
'x-dead-letter-routing-key' => msg.event,
|
108
|
-
}
|
109
|
-
)
|
110
|
-
GorgService.logger.info "DEFER MESSAGE : message sent to #{delayed_queue_name} with routing key #{msg.event}"
|
111
|
-
q.publish(msg.to_json, :routing_key => msg.event)
|
83
|
+
if @env.delayed_queue_for msg.event
|
84
|
+
@env.delayed_in_exchange.publish(msg.to_json, :routing_key => msg.event)
|
85
|
+
GorgService.logger.info "DEFER MESSAGE : message sent to #{@env.delayed_in_exchange.name} with routing key #{msg.event}"
|
86
|
+
else
|
87
|
+
raise "DelayedQueueNotFound"
|
88
|
+
end
|
112
89
|
end
|
113
90
|
|
114
91
|
def message_handler_for routing_key
|
@@ -0,0 +1,83 @@
|
|
1
|
+
class GorgService
|
2
|
+
class RabbitmqEnvBuilder
|
3
|
+
|
4
|
+
def initialize(conn:nil,main_exchange:"", app_id:"", deferred_time: 10000, listened_routing_keys: [])
|
5
|
+
@_conn=conn
|
6
|
+
@app_id=app_id
|
7
|
+
@main_exchange_name=main_exchange
|
8
|
+
@deferred_time=deferred_time
|
9
|
+
@delayed_queues={}
|
10
|
+
@listened_routing_keys=listened_routing_keys
|
11
|
+
set_logger
|
12
|
+
end
|
13
|
+
|
14
|
+
def conn
|
15
|
+
@_conn.start unless @_conn.connected?
|
16
|
+
@_conn
|
17
|
+
end
|
18
|
+
|
19
|
+
def ch
|
20
|
+
@_ch = (@_ch && @_ch.status == :open) ? @_ch : conn.create_channel
|
21
|
+
end
|
22
|
+
|
23
|
+
def main_exchange
|
24
|
+
ch.topic(@main_exchange_name, :durable => true)
|
25
|
+
end
|
26
|
+
|
27
|
+
def delayed_in_exchange
|
28
|
+
ch.topic("#{@app_id}_delayed_in_x", :durable => true)
|
29
|
+
end
|
30
|
+
|
31
|
+
def delayed_out_exchange
|
32
|
+
ch.fanout("#{@app_id}_delayed_out_x", :durable => true)
|
33
|
+
end
|
34
|
+
|
35
|
+
def job_queue
|
36
|
+
GorgService.logger.debug @listened_routing_keys
|
37
|
+
q=ch.queue("#{@app_id}_job_q", :durable => true)
|
38
|
+
q.bind delayed_out_exchange
|
39
|
+
@listened_routing_keys.each do |rk|
|
40
|
+
q.bind(main_exchange, :routing_key => rk)
|
41
|
+
end
|
42
|
+
q
|
43
|
+
end
|
44
|
+
|
45
|
+
def delayed_queue_for routing_key
|
46
|
+
@delayed_queues[routing_key]||= create_delayed_queue_for(routing_key)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def set_logger
|
52
|
+
x=ch.fanout("log", :durable => true)
|
53
|
+
x.bind(main_exchange, :routing_key => "*")
|
54
|
+
x.bind(delayed_in_exchange, :routing_key => "*")
|
55
|
+
end
|
56
|
+
|
57
|
+
def create_delayed_queue_for(routing_key)
|
58
|
+
q_name="#{@app_id}_#{routing_key.gsub(".","-")}_deferred_q"
|
59
|
+
|
60
|
+
begin
|
61
|
+
q=ch.queue(q_name,
|
62
|
+
durable: true,
|
63
|
+
arguments: {
|
64
|
+
'x-message-ttl' => @deferred_time,
|
65
|
+
'x-dead-letter-exchange' => delayed_out_exchange.name,
|
66
|
+
'x-dead-letter-routing-key' => routing_key,
|
67
|
+
}
|
68
|
+
)
|
69
|
+
|
70
|
+
q.bind(delayed_in_exchange.name, :routing_key => routing_key)
|
71
|
+
rescue Bunny::PreconditionFailed => e
|
72
|
+
if e.message.start_with?("PRECONDITION_FAILED - inequivalent arg")
|
73
|
+
GorgService.logger.fatal("Mismatching configuration : admin action necessary. Error was : #{e.message}")
|
74
|
+
raise "MismatchingConfig"
|
75
|
+
end
|
76
|
+
raise
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
#ch.queue(test, durable: true, arguments: {'x-message-ttl' => 1000,'x-dead-letter-exchange' => "agoram_event_exchange",'x-dead-letter-routing-key' => "test",})
|
data/lib/gorg_service/version.rb
CHANGED
data/lib/gorg_service.rb
CHANGED
@@ -2,6 +2,7 @@ require "gorg_message_sender"
|
|
2
2
|
require "gorg_service/configuration"
|
3
3
|
require "gorg_service/version"
|
4
4
|
require "gorg_service/errors"
|
5
|
+
require "gorg_service/rabbitmq_env_builder"
|
5
6
|
require "gorg_service/listener"
|
6
7
|
require "gorg_service/message"
|
7
8
|
require "gorg_service/message_handler"
|
@@ -10,7 +11,7 @@ require "gorg_service/message_handler"
|
|
10
11
|
RabbitmqProducer=GorgMessageSender.dup
|
11
12
|
|
12
13
|
class GorgService
|
13
|
-
def initialize(listener: nil, bunny_session: nil)
|
14
|
+
def initialize(listener: nil, bunny_session: nil, rabbitmq_env:nil)
|
14
15
|
|
15
16
|
@bunny_session= bunny_session || Bunny.new(
|
16
17
|
:hostname => GorgService.configuration.rabbitmq_host,
|
@@ -20,12 +21,18 @@ class GorgService
|
|
20
21
|
:vhost => GorgService.configuration.rabbitmq_vhost
|
21
22
|
)
|
22
23
|
|
24
|
+
@env=rabbitmq_env || RabbitmqEnvBuilder.new(
|
25
|
+
conn: @bunny_session,
|
26
|
+
main_exchange: GorgService.configuration.rabbitmq_exchange_name,
|
27
|
+
app_id:GorgService.configuration.application_id,
|
28
|
+
deferred_time: GorgService.configuration.rabbitmq_deferred_time,
|
29
|
+
listened_routing_keys: GorgService.configuration.message_handler_map.keys,
|
30
|
+
)
|
31
|
+
|
23
32
|
@listener= listener || Listener.new(
|
24
33
|
bunny_session: @bunny_session,
|
25
34
|
message_handler_map:GorgService.configuration.message_handler_map,
|
26
|
-
|
27
|
-
exchange_name: GorgService.configuration.rabbitmq_exchange_name,
|
28
|
-
deferred_time: GorgService.configuration.rabbitmq_deferred_time,
|
35
|
+
env: @env,
|
29
36
|
max_attempts: GorgService.configuration.rabbitmq_max_attempts,
|
30
37
|
log_routing_key: GorgService.configuration.log_routing_key
|
31
38
|
)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gorg_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre Narbonne
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- Rakefile
|
160
160
|
- bin/console
|
161
161
|
- bin/setup
|
162
|
+
- bin/worker
|
162
163
|
- gorg_service.gemspec
|
163
164
|
- lib/gorg_service.rb
|
164
165
|
- lib/gorg_service/configuration.rb
|
@@ -168,6 +169,7 @@ files:
|
|
168
169
|
- lib/gorg_service/message/error_log.rb
|
169
170
|
- lib/gorg_service/message/json_schema.rb
|
170
171
|
- lib/gorg_service/message_handler.rb
|
172
|
+
- lib/gorg_service/rabbitmq_env_builder.rb
|
171
173
|
- lib/gorg_service/version.rb
|
172
174
|
homepage: https://github.com/Zooip/gorg_service
|
173
175
|
licenses:
|