gorg_service 3.0.0 → 4.0.0
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.
- 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:
|