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 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: