rabbit_carrots 1.0.2 → 1.0.3
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/Gemfile.lock +5 -5
- data/README.md +1 -0
- data/lib/puma/plugin/rabbit_carrots.rb +3 -2
- data/lib/rabbit_carrots/configuration.rb +2 -2
- data/lib/rabbit_carrots/core.rb +29 -10
- data/lib/rabbit_carrots/version.rb +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bbe59dfd2a28bbe73bb736c70214e88dab67ec860673fb856fbef99e160618a
|
4
|
+
data.tar.gz: 4ceac6041889f8ef802504d5342f860c9908bdcdd2f88b16fea7872073da23e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af8a715a93424768b6fbe20aa5a442963ae643964b896f45604e27bb0c810259e1f7a9d5c8cd1fb4fa523b3ab10a2fb374200b2bb11bfce8fdd470a7f5228640
|
7
|
+
data.tar.gz: 7758e6422d668ae44dd9be62519afe5e863081f151f30a265f408e256cc701b20580fe8ce089e2d00233c5d4c1a3c1d8178d019ae95610ae752abec6f9c0d2d1
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rabbit_carrots (1.0.
|
4
|
+
rabbit_carrots (1.0.3)
|
5
5
|
bunny (>= 2.22)
|
6
6
|
connection_pool (~> 2.4)
|
7
7
|
|
@@ -18,12 +18,12 @@ GEM
|
|
18
18
|
minitest (>= 5.1)
|
19
19
|
mutex_m
|
20
20
|
tzinfo (~> 2.0)
|
21
|
-
amq-protocol (2.3.
|
21
|
+
amq-protocol (2.3.4)
|
22
22
|
ast (2.4.2)
|
23
23
|
base64 (0.2.0)
|
24
24
|
bigdecimal (3.1.4)
|
25
|
-
bunny (2.
|
26
|
-
amq-protocol (~> 2.3
|
25
|
+
bunny (2.24.0)
|
26
|
+
amq-protocol (~> 2.3)
|
27
27
|
sorted_set (~> 1, >= 1.0.2)
|
28
28
|
concurrent-ruby (1.2.2)
|
29
29
|
connection_pool (2.4.1)
|
@@ -80,7 +80,7 @@ GEM
|
|
80
80
|
rubocop-ast (>= 1.30.0, < 2.0)
|
81
81
|
ruby-progressbar (1.13.0)
|
82
82
|
ruby2_keywords (0.0.5)
|
83
|
-
set (1.1.
|
83
|
+
set (1.1.2)
|
84
84
|
sorted_set (1.0.3)
|
85
85
|
rbtree
|
86
86
|
set (~> 1.0)
|
data/README.md
CHANGED
@@ -36,6 +36,7 @@ RabbitCarrots.configure do |c|
|
|
36
36
|
c.automatically_recover = true
|
37
37
|
c.network_recovery_interval = 5
|
38
38
|
c.recovery_attempts = 5
|
39
|
+
c.orm = :activerecord || :mongoid
|
39
40
|
c.routing_key_mappings = [
|
40
41
|
{ routing_keys: ['RK1', 'RK2'], queue: 'QUEUE_NAME', handler: 'CLASS HANDLER IN STRING' },
|
41
42
|
{ routing_keys: ['RK1', 'RK2'], queue: 'QUEUE_NAME', handler: 'CLASS HANDLER IN STRING' }
|
@@ -8,7 +8,7 @@ Puma::Plugin.create do
|
|
8
8
|
|
9
9
|
def start(launcher)
|
10
10
|
@log_writer = launcher.log_writer
|
11
|
-
@puma_pid =
|
11
|
+
@puma_pid = $PROCESS_ID
|
12
12
|
|
13
13
|
@core_service = RabbitCarrots::Core.new(logger: log_writer)
|
14
14
|
|
@@ -43,6 +43,7 @@ Puma::Plugin.create do
|
|
43
43
|
Process.kill('TERM', rabbit_carrots_pid)
|
44
44
|
Process.wait(rabbit_carrots_pid)
|
45
45
|
rescue Errno::ECHILD, Errno::ESRCH
|
46
|
+
log 'Rabbit Carrots already stopped'
|
46
47
|
end
|
47
48
|
|
48
49
|
def monitor_puma
|
@@ -57,7 +58,7 @@ Puma::Plugin.create do
|
|
57
58
|
loop do
|
58
59
|
if send(process_dead)
|
59
60
|
log message
|
60
|
-
Process.kill('TERM',
|
61
|
+
Process.kill('TERM', $PROCESS_ID)
|
61
62
|
break
|
62
63
|
end
|
63
64
|
sleep 2
|
data/lib/rabbit_carrots/core.rb
CHANGED
@@ -11,7 +11,7 @@ module RabbitCarrots
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize(logger: nil)
|
14
|
-
@logger = logger || Logger.new(Rails.env.production? ? '/proc/self/fd/1' : $stdout)
|
14
|
+
@logger = create_logger_adapter(logger || Logger.new(Rails.env.production? ? '/proc/self/fd/1' : $stdout))
|
15
15
|
@threads = []
|
16
16
|
@running = true
|
17
17
|
@shutdown_requested = false
|
@@ -61,7 +61,7 @@ module RabbitCarrots
|
|
61
61
|
def request_shutdown
|
62
62
|
# Workaround to a known issue with Signal Traps and logs
|
63
63
|
Thread.start do
|
64
|
-
logger.
|
64
|
+
logger.error 'Shutting down Rabbit Carrots service...'
|
65
65
|
end
|
66
66
|
@shutdown_requested = true
|
67
67
|
@threads.each(&:kill)
|
@@ -71,7 +71,7 @@ module RabbitCarrots
|
|
71
71
|
def stop
|
72
72
|
# Workaround to a known issue with Signal Traps and logs
|
73
73
|
Thread.start do
|
74
|
-
logger.
|
74
|
+
logger.error 'Stoppig the Rabbit Carrots service...'
|
75
75
|
end
|
76
76
|
@running = false
|
77
77
|
end
|
@@ -80,7 +80,7 @@ module RabbitCarrots
|
|
80
80
|
RabbitCarrots::Connection.instance.channel.with do |channel|
|
81
81
|
exchange = channel.topic(RabbitCarrots.configuration.rabbitmq_exchange_name, durable: true)
|
82
82
|
|
83
|
-
logger.
|
83
|
+
logger.info "Listening on QUEUE: #{queue_name} for ROUTING KEYS: #{routing_keys}"
|
84
84
|
queue = channel.queue(queue_name, durable: true, arguments: queue_arguments)
|
85
85
|
|
86
86
|
routing_keys.map(&:strip).each { |k| queue.bind(exchange, routing_key: k) }
|
@@ -88,24 +88,24 @@ module RabbitCarrots
|
|
88
88
|
queue.subscribe(block: false, manual_ack: true, prefetch: 10) do |delivery_info, properties, payload|
|
89
89
|
break if @shutdown_requested
|
90
90
|
|
91
|
-
logger.
|
91
|
+
logger.info "Received from queue: #{queue_name}, Routing Keys: #{routing_keys}"
|
92
92
|
handler_class.handle!(channel, delivery_info, properties, payload)
|
93
93
|
channel.ack(delivery_info.delivery_tag, false)
|
94
94
|
rescue RabbitCarrots::EventHandlers::Errors::NackMessage, JSON::ParserError => _e
|
95
|
-
logger.
|
95
|
+
logger.warn "Nacked message: #{payload}"
|
96
96
|
channel.nack(delivery_info.delivery_tag, false, false)
|
97
97
|
rescue RabbitCarrots::EventHandlers::Errors::NackAndRequeueMessage => _e
|
98
|
-
logger.
|
98
|
+
logger.warn "Nacked and Requeued message: #{payload}"
|
99
99
|
channel.nack(delivery_info.delivery_tag, false, true)
|
100
100
|
rescue self.class.database_agnostic_not_null_violation, self.class.database_agnostic_record_invalid => e
|
101
|
-
logger.
|
101
|
+
logger.warn "Null constraint or Invalid violation: #{payload}. Error: #{e.message}"
|
102
102
|
channel.ack(delivery_info.delivery_tag, false)
|
103
103
|
rescue self.class.database_agnostic_connection_not_established => e
|
104
|
-
logger.
|
104
|
+
logger.warn "Error connection not established to the database: #{payload}. Error: #{e.message}"
|
105
105
|
sleep 3
|
106
106
|
channel.nack(delivery_info.delivery_tag, false, true)
|
107
107
|
rescue StandardError => e
|
108
|
-
logger.
|
108
|
+
logger.error "Error handling message: #{payload}. Error: #{e.message}"
|
109
109
|
sleep 3
|
110
110
|
channel.nack(delivery_info.delivery_tag, false, true)
|
111
111
|
Process.kill('SIGTERM', Process.pid) if kill_to_restart_on_standard_error
|
@@ -115,5 +115,24 @@ module RabbitCarrots
|
|
115
115
|
logger.error "Bunny session error: #{e.message}"
|
116
116
|
request_shutdown
|
117
117
|
end
|
118
|
+
|
119
|
+
private
|
120
|
+
|
121
|
+
def create_logger_adapter(logger)
|
122
|
+
return logger if logger.respond_to?(:info) && logger.respond_to?(:error) && logger.respond_to?(:warn)
|
123
|
+
|
124
|
+
adapter = Object.new
|
125
|
+
def adapter.info(msg)
|
126
|
+
@logger.write("[INFO] #{msg}\n")
|
127
|
+
end
|
128
|
+
def adapter.error(msg)
|
129
|
+
@logger.write("[ERROR] #{msg}\n")
|
130
|
+
end
|
131
|
+
def adapter.warn(msg)
|
132
|
+
@logger.write("[WARN] #{msg}\n")
|
133
|
+
end
|
134
|
+
adapter.instance_variable_set(:@logger, logger)
|
135
|
+
adapter
|
136
|
+
end
|
118
137
|
end
|
119
138
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbit_carrots
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brusk Awat
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-05-25 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bunny
|
@@ -73,7 +72,6 @@ metadata:
|
|
73
72
|
source_code_uri: https://github.com/ditkrg/rabbit_carrots
|
74
73
|
changelog_uri: https://github.com/ditkrg/rabbit_carrots
|
75
74
|
rubygems_mfa_required: 'true'
|
76
|
-
post_install_message:
|
77
75
|
rdoc_options: []
|
78
76
|
require_paths:
|
79
77
|
- lib
|
@@ -88,8 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
86
|
- !ruby/object:Gem::Version
|
89
87
|
version: '0'
|
90
88
|
requirements: []
|
91
|
-
rubygems_version: 3.
|
92
|
-
signing_key:
|
89
|
+
rubygems_version: 3.6.2
|
93
90
|
specification_version: 4
|
94
91
|
summary: A simple RabbitMQ consumer task
|
95
92
|
test_files: []
|