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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec75b0953c9f9990359d16dd8f5d8e5819b7cf12
4
- data.tar.gz: 6bf86e98e9b991b8dd180d414970bf344c4f93c9
3
+ metadata.gz: 2796183c085588be8c61f098ff65fa089d47160d
4
+ data.tar.gz: fc992e99c193dd9cfd640d4c85cbdd928b4863c8
5
5
  SHA512:
6
- metadata.gz: 49fb5032efcf8ddbf5c4482c64fa424bfa73007e3cfcebb588df85b289368e9594b87159efd77426cdf8fb0a3b8dfb32b9aeac9104cb775e820892082b4ea40d
7
- data.tar.gz: e97e322499febeddb448239619f067cb0fe43f52bbec964657a3e333061d5c28a9497088fb4f60fa7f21211ee3d1d3982e96f012712c06c22b7bb856f20b81c6
6
+ metadata.gz: 2aabf7b5ac8302b358e165660a41959c1ad126c8c413e76d1f165b8484e1c8b4b0c5af719f20362d26b303c3ca759b3e7ba17d6f0f647bafa5fd05494205839a
7
+ data.tar.gz: 78a4a7ee82987bd195292186b9753511f9b0ff6782814eca3404c0f5da14ce1fc15a4d71276836116b8a239246a3ffd7276a3bacd7ce2f65e2039c781015a08a
data/.gitignore CHANGED
@@ -9,7 +9,8 @@
9
9
  /tmp/
10
10
  /build/
11
11
  *.gem
12
- /bin/worker
13
12
  /spec/gorg_service/support/conf/rabbit_mq.yml
14
13
 
15
- .idea
14
+ .idea
15
+ .byebug_history
16
+ bin/env.rb
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,queue_name: "gorg_service", exchange_name: nil, message_handler_map: {default: DefaultMessageHandler}, deferred_time: 1800000, max_attempts: 48,log_routing_key: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
- def listen
15
+ @env=env
16
+ end
20
17
 
21
- set_rabbitmq_env
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
- conn=rmq_connection
100
- @delayed_chan||=conn.create_channel
101
- delayed_queue_name="#{msg.event.gsub(".","-")}_deferred"
102
- q=@delayed_chan.queue(delayed_queue_name,
103
- durable: true,
104
- arguments: {
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",})
@@ -2,5 +2,5 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  class GorgService
5
- VERSION = "3.0.0"
5
+ VERSION = "4.0.0"
6
6
  end
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
- queue_name: GorgService.configuration.rabbitmq_queue_name,
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: 3.0.0
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-01 00:00:00.000000000 Z
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: