emque-consuming 1.4.0 → 1.8.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
- SHA1:
3
- metadata.gz: 80e5272a0662b1b988a65aa018e660d5e20419df
4
- data.tar.gz: 47219402278bc3a89aec13bb3b091589e132e8e9
2
+ SHA256:
3
+ metadata.gz: a33e1cb0ba1688a3afd735ee7aee23a8b331e744cd0453056b96c4552f51dd02
4
+ data.tar.gz: c380412c8831d5ffa843d56da14a4ed45647d9c4fd075fe6a2aace2a1ee9ea29
5
5
  SHA512:
6
- metadata.gz: c7d245d0cfd817397282b24cca7526f4ec4115c5a76d13f9dea449a48c427b9fc8727655b7c0ff915048bc8aff9e936a03906201b302de0f13bb7f8a61c24d54
7
- data.tar.gz: '07900ca7faccf7cb4be8e01a16d69413b79bcab37f9b820d9a6c732fd8af055377cc8cc59351d63134ff6ce501158e88a47df35c85bc13df1c896d6d5fc6cb22'
6
+ metadata.gz: de3eb3ea8e8deb9ec9917df070c2559c5b2857fc996e59abaff091756d33c1b65603c310ea586dd744daae9224cf801405201beeff5426b7e28924ba2695de79
7
+ data.tar.gz: 78ebf244f57a11f99b3fe5cca252647e37a67179b863d031243d6ff636d3e8b2f076e2ab60992c932f52d6f9a21ee2e9f1c0d7619d107741d2a668cd973bcc8c
@@ -1,9 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.1
4
3
  - 2.3.8
5
- - 2.4.5
6
- - 2.5.3
4
+ - 2.4.10
5
+ - 2.5.8
6
+ - 2.6.6
7
7
  script: bundle exec rake
8
8
  notifications:
9
9
  recipients:
@@ -1,5 +1,11 @@
1
1
  # Emque Consuming CHANGELOG
2
2
 
3
+ - [Add prefetch for DelayedMessageWorker](https://github.com/emque/emque-consuming/pull/81) (1.8.0)
4
+ - [Update Rake to fix CVE-2020-8130](https://github.com/emque/emque-consuming/pull/80) (1.7.1)
5
+ - [Update pipe-ruby to remove error handling](https://github.com/emque/emque-consuming/pull/78) 1.7.0
6
+ - [Fixes bug with Bunny 2.12 failing when exchange names are symbols](https://github.com/emque/emque-consuming/pull/77) 1.6.1
7
+ - [Re-enable pipe-ruby `raise_on_error` option to fix automatic retries directing messages to the error queue](https://github.com/emque/emque-consuming/pull/75) 1.6.0
8
+ - [Update the puma gem to allow v3](https://github.com/emque/emque-consuming/pull/72) 1.5.0
3
9
  - [Disable pipe-ruby `raise_on_error` option to prevent duplicate erorrs](https://github.com/emque/emque-consuming/pull/74) 1.4.0
4
10
  - [Update minimum Ruby version to 2.3](https://github.com/emque/emque-consuming/pull/68) 1.3.0
5
11
  - [Update the oj gem to 2.18.5](https://github.com/emque/emque-consuming/pull/67) 1.2.4
@@ -6,7 +6,7 @@ require "emque/consuming/version"
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "emque-consuming"
8
8
  spec.version = Emque::Consuming::VERSION
9
- spec.authors = ["Ryan Williams", "Dan Matthews"]
9
+ spec.authors = ["Ryan Williams", "Dan Matthews", "Paul Hanyzewski"]
10
10
  spec.email = ["oss@teamsnap.com"]
11
11
  spec.summary = %q{Microservices framework for Ruby}
12
12
  spec.summary = %q{Microservices framework for Ruby}
@@ -23,12 +23,12 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency "dante", "~> 0.2.0"
24
24
  spec.add_dependency "oj", "~> 2.18.5"
25
25
  spec.add_dependency "virtus", "~> 1.0"
26
- spec.add_dependency "puma", "~> 2.12.0"
27
- spec.add_dependency "pipe-ruby", "~> 0.2.0"
26
+ spec.add_dependency "puma", "~> 3.12"
27
+ spec.add_dependency "pipe-ruby", "~> 1.0"
28
28
  spec.add_dependency "inflecto", "~> 0.0.2"
29
29
 
30
30
  spec.add_development_dependency "bundler", "~> 1.7"
31
- spec.add_development_dependency "rake", "~> 10.4.2"
31
+ spec.add_development_dependency "rake", ">= 12.3.3"
32
32
  spec.add_development_dependency "rspec", "~> 3.3"
33
33
  spec.add_development_dependency "bunny", "~> 2.11.0"
34
34
  spec.add_development_dependency "timecop", "~> 0.7.1"
@@ -18,6 +18,10 @@ module Emque
18
18
  def initialize(connection)
19
19
  self.channel = connection.create_channel
20
20
 
21
+ if config.adapter.options[:prefetch]
22
+ channel.prefetch(config.adapter.options[:prefetch])
23
+ end
24
+
21
25
  self.delayed_message_exchange = channel.exchange(
22
26
  "emque.#{config.app_name}.delayed_message",
23
27
  {
@@ -69,8 +73,6 @@ module Emque
69
73
  ::Emque::Consuming::Consumer.new.consume(:process, message)
70
74
  channel.ack(delivery_info.delivery_tag)
71
75
  rescue StandardError => exception
72
- logger.error "#{log_prefix} #{exception.class}: #{exception.message}"
73
- exception.backtrace.each { |bt| logger.error "#{log_prefix} #{bt}" }
74
76
  if retryable_errors.any? { |error| exception.class.to_s =~ /#{error}/ }
75
77
  retry_error(delivery_info, metadata, payload, exception)
76
78
  else
@@ -15,7 +15,7 @@ module Emque
15
15
  def retry_errors
16
16
  logger.info "#{log_prefix} starting"
17
17
  channel.open if channel.closed?
18
- error_queue.message_count.times do
18
+ [error_queue.message_count, 100].min.times do
19
19
  delivery_info, properties, payload = error_queue.pop(
20
20
  {:manual_ack => true}
21
21
  )
@@ -56,8 +56,6 @@ module Emque
56
56
  ::Emque::Consuming::Consumer.new.consume(:process, message)
57
57
  channel.ack(delivery_info.delivery_tag)
58
58
  rescue StandardError => exception
59
- logger.error "#{log_prefix} #{exception.class}: #{exception.message}"
60
- exception.backtrace.each { |bt| logger.error "#{log_prefix} #{bt}" }
61
59
  channel.nack(delivery_info.delivery_tag)
62
60
  end
63
61
  end
@@ -31,19 +31,22 @@ module Emque
31
31
  channel.prefetch(config.adapter.options[:prefetch])
32
32
  end
33
33
 
34
- self.queue =
35
- channel
36
- .queue(
37
- "emque.#{config.app_name}.#{topic}",
38
- :durable => config.adapter.options[:durable],
39
- :auto_delete => config.adapter.options[:auto_delete],
40
- :arguments => {
41
- "x-dead-letter-exchange" => "#{config.app_name}.error"
42
- }
43
- )
44
- .bind(
45
- channel.fanout(topic, :durable => true, :auto_delete => false)
46
- )
34
+ self.queue = channel
35
+ .queue(
36
+ "emque.#{config.app_name}.#{topic}",
37
+ :durable => config.adapter.options[:durable],
38
+ :auto_delete => config.adapter.options[:auto_delete],
39
+ :arguments => {
40
+ "x-dead-letter-exchange" => "#{config.app_name}.error"
41
+ }
42
+ )
43
+ .bind(
44
+ channel.fanout(
45
+ topic.to_s,
46
+ :durable => true,
47
+ :auto_delete => false,
48
+ )
49
+ )
47
50
  end
48
51
 
49
52
  def start
@@ -79,8 +82,6 @@ module Emque
79
82
  ::Emque::Consuming::Consumer.new.consume(:process, message)
80
83
  channel.ack(delivery_info.delivery_tag)
81
84
  rescue StandardError => exception
82
- logger.error "#{log_prefix} #{exception.class}: #{exception.message}"
83
- exception.backtrace.each { |bt| logger.error "#{log_prefix} #{bt}" }
84
85
  if enable_delayed_message
85
86
  begin
86
87
  publish_to_delayed_message(delivery_info, metadata, payload)
@@ -13,7 +13,6 @@ module Emque
13
13
  end
14
14
 
15
15
  def start
16
- puma.options[:app] = Handler.new
17
16
  @thread = Thread.new { puma.run }
18
17
  status
19
18
  end
@@ -21,23 +20,20 @@ module Emque
21
20
  private
22
21
 
23
22
  def initialize_puma
24
- self.puma =
25
- Puma::CLI.new(
26
- [],
27
- Puma::Events.new(
28
- Logger.new(:info),
29
- Logger.new(:error)
30
- )
31
- )
32
-
33
- puma.options[:binds] = [
34
- "tcp://#{config.status_host}"+
35
- ":#{config.status_port}"
36
- ]
23
+ conf = Puma::Configuration.new do |user_config|
24
+ user_config.bind "tcp://#{config.status_host}:#{config.status_port}"
25
+ user_config.app Handler.new
26
+ end
27
+
28
+ self.puma = Puma::Launcher.new(conf, :events => Puma::Events.null)
37
29
 
38
30
  puma.define_singleton_method :set_process_title do
39
31
  # we don't want puma to take over the process name
40
32
  end
33
+
34
+ puma.define_singleton_method :setup_signals do
35
+ # we don't want puma to handle signals
36
+ end
41
37
  end
42
38
 
43
39
  class Handler
@@ -11,6 +11,9 @@ module Emque
11
11
 
12
12
  def process(message)
13
13
  pipe(message, :through => [:parse, :route])
14
+ rescue => e
15
+ handle_error(e, message)
16
+ raise
14
17
  end
15
18
 
16
19
  private
@@ -29,6 +32,28 @@ module Emque
29
32
  message
30
33
  )
31
34
  end
35
+
36
+ def handle_error(e, subject)
37
+ context = {
38
+ :consumer => self.class.name,
39
+ :message => {
40
+ :current => subject.values,
41
+ :original => subject.original
42
+ },
43
+ :topic => subject.topic
44
+ }
45
+
46
+ # log the error by default
47
+ Emque::Consuming.logger.error("Error consuming message #{e}")
48
+ Emque::Consuming.logger.error(context)
49
+ Emque::Consuming.logger.error e.backtrace.join("\n") unless e.backtrace.nil?
50
+
51
+ Emque::Consuming.config.error_handlers.each do |handler|
52
+ handler.call(e, context)
53
+ end
54
+
55
+ Emque::Consuming.application.instance.notice_error(context)
56
+ end
32
57
  end
33
58
  end
34
59
  end
@@ -16,7 +16,6 @@ module Emque
16
16
  def self.included(descendant)
17
17
  descendant.class_eval do
18
18
  attr_reader :message
19
- private :handle_error, :pipe
20
19
  end
21
20
  end
22
21
 
@@ -26,36 +25,9 @@ module Emque
26
25
 
27
26
  def pipe_config
28
27
  @pipe_config ||= Pipe::Config.new(
29
- :error_handlers => [method(:handle_error)],
30
- :raise_on_error => false,
31
28
  :stop_on => ->(msg, _, _) { !(msg.respond_to?(:continue?) && msg.continue?) }
32
29
  )
33
30
  end
34
-
35
- def handle_error(e, method:, subject:)
36
- context = {
37
- :consumer => self.class.name,
38
- :message => {
39
- :current => subject.values,
40
- :original => subject.original
41
- },
42
- :offset => subject.offset,
43
- :partition => subject.partition,
44
- :pipe_method => method,
45
- :topic => subject.topic
46
- }
47
-
48
- # log the error by default
49
- Emque::Consuming.logger.error("Error consuming message #{e}")
50
- Emque::Consuming.logger.error(context)
51
- Emque::Consuming.logger.error e.backtrace.join("\n") unless e.backtrace.nil?
52
-
53
- Emque::Consuming.config.error_handlers.each do |handler|
54
- handler.call(e, context)
55
- end
56
-
57
- Emque::Consuming.application.instance.notice_error(context)
58
- end
59
31
  end
60
32
  end
61
33
  end
@@ -1,5 +1,5 @@
1
1
  module Emque
2
2
  module Consuming
3
- VERSION = "1.4.0"
3
+ VERSION = "1.8.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emque-consuming
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Williams
8
8
  - Dan Matthews
9
+ - Paul Hanyzewski
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2018-12-21 00:00:00.000000000 Z
13
+ date: 2020-09-16 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: celluloid
@@ -73,28 +74,28 @@ dependencies:
73
74
  requirements:
74
75
  - - "~>"
75
76
  - !ruby/object:Gem::Version
76
- version: 2.12.0
77
+ version: '3.12'
77
78
  type: :runtime
78
79
  prerelease: false
79
80
  version_requirements: !ruby/object:Gem::Requirement
80
81
  requirements:
81
82
  - - "~>"
82
83
  - !ruby/object:Gem::Version
83
- version: 2.12.0
84
+ version: '3.12'
84
85
  - !ruby/object:Gem::Dependency
85
86
  name: pipe-ruby
86
87
  requirement: !ruby/object:Gem::Requirement
87
88
  requirements:
88
89
  - - "~>"
89
90
  - !ruby/object:Gem::Version
90
- version: 0.2.0
91
+ version: '1.0'
91
92
  type: :runtime
92
93
  prerelease: false
93
94
  version_requirements: !ruby/object:Gem::Requirement
94
95
  requirements:
95
96
  - - "~>"
96
97
  - !ruby/object:Gem::Version
97
- version: 0.2.0
98
+ version: '1.0'
98
99
  - !ruby/object:Gem::Dependency
99
100
  name: inflecto
100
101
  requirement: !ruby/object:Gem::Requirement
@@ -127,16 +128,16 @@ dependencies:
127
128
  name: rake
128
129
  requirement: !ruby/object:Gem::Requirement
129
130
  requirements:
130
- - - "~>"
131
+ - - ">="
131
132
  - !ruby/object:Gem::Version
132
- version: 10.4.2
133
+ version: 12.3.3
133
134
  type: :development
134
135
  prerelease: false
135
136
  version_requirements: !ruby/object:Gem::Requirement
136
137
  requirements:
137
- - - "~>"
138
+ - - ">="
138
139
  - !ruby/object:Gem::Version
139
- version: 10.4.2
140
+ version: 12.3.3
140
141
  - !ruby/object:Gem::Dependency
141
142
  name: rspec
142
143
  requirement: !ruby/object:Gem::Requirement
@@ -289,8 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
289
290
  - !ruby/object:Gem::Version
290
291
  version: '0'
291
292
  requirements: []
292
- rubyforge_project:
293
- rubygems_version: 2.5.2.3
293
+ rubygems_version: 3.0.3
294
294
  signing_key:
295
295
  specification_version: 4
296
296
  summary: Microservices framework for Ruby