hanami-events-cloud_pubsub 2.1.3 → 2.1.4
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
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e51fcb2486cdeca9c675d1a37e4c70f21ba9cad09fc3a148294cb03f1a2570ec
|
|
4
|
+
data.tar.gz: cdfad2c9b22abf3c4c80349b977c7f966e0a1c40faf955f4553ab06cbf999eb1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 820f3a4bed9594d8ce3b287232d59d1a4d2b96334b6b4ce4ce5ee0693db56536902e89773321f7486319a86a1f39f077ec1410c4a5cd5930004366325724feb0
|
|
7
|
+
data.tar.gz: 6349ab7adf08c16a7847f51e94278ca771a40ebf1ebbb567b1b78c53e8dabea06143e5a37b07f119533b7d91fa17c331e4693dd4ffe356f69f4f97b4f42c3311
|
data/Gemfile.lock
CHANGED
|
@@ -7,8 +7,11 @@ module Hanami
|
|
|
7
7
|
module Middleware
|
|
8
8
|
# Middleware used for automatically acknowledging messages
|
|
9
9
|
class AutoRetry
|
|
10
|
-
|
|
10
|
+
attr_reader :max_attempts
|
|
11
|
+
|
|
12
|
+
def initialize(logger: nil, max_attempts: 1200)
|
|
11
13
|
@logger = logger
|
|
14
|
+
@max_attempts = max_attempts
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
def call(message, args = {})
|
|
@@ -26,22 +29,48 @@ module Hanami
|
|
|
26
29
|
private
|
|
27
30
|
|
|
28
31
|
def ack_or_reject(message, succeeded, failed, args)
|
|
29
|
-
id = message.message_id
|
|
30
|
-
|
|
31
32
|
if succeeded
|
|
32
|
-
message
|
|
33
|
-
|
|
33
|
+
handle_success(message, args)
|
|
34
|
+
elsif failed && max_attempts_reached?(args)
|
|
35
|
+
handle_max_attempts_reached(message, args)
|
|
34
36
|
elsif failed
|
|
35
|
-
|
|
36
|
-
success = message.modify_ack_deadline!(seconds)
|
|
37
|
-
msg = "added #{success ? seconds : 0} seconds of delay to ack deadline"
|
|
38
|
-
logger.debug "Message(#{id}) failed, #{msg}" if success
|
|
37
|
+
handle_failure(message, args)
|
|
39
38
|
else
|
|
40
|
-
message
|
|
41
|
-
logger.warn "Message(#{id}) was terminated from outside, rescheduling"
|
|
39
|
+
handle_unfinished(message, args)
|
|
42
40
|
end
|
|
43
41
|
end
|
|
44
42
|
|
|
43
|
+
def handle_success(message, _args)
|
|
44
|
+
message.acknowledge!
|
|
45
|
+
logger.debug "Message(#{message.message_id}) was acknowledged"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def max_attempts_reached?(args)
|
|
49
|
+
args.key?(:attempts) && args[:attempts] >= max_attempts
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def handle_max_attempts_reached(message, _args)
|
|
53
|
+
id = message.message_id
|
|
54
|
+
msg = 'number of attempts exceeded max attempts ' \
|
|
55
|
+
"of #{max_attempts}, acknowledging message"
|
|
56
|
+
logger.debug "Message(#{id}) failed, #{msg}"
|
|
57
|
+
message.acknowledge!
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def handle_failure(message, args)
|
|
61
|
+
id = message.message_id
|
|
62
|
+
seconds = calculate_backoff_seconds(message, args)
|
|
63
|
+
success = message.modify_ack_deadline!(seconds)
|
|
64
|
+
msg = "added #{success ? seconds : 0} seconds of delay to ack deadline"
|
|
65
|
+
logger.debug "Message(#{id}) failed, #{msg}" if success
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def handle_unfinished(message, _args)
|
|
69
|
+
id = message.message_id
|
|
70
|
+
message.reject!
|
|
71
|
+
logger.warn "Message(#{id}) was terminated from outside, rescheduling"
|
|
72
|
+
end
|
|
73
|
+
|
|
45
74
|
def logger
|
|
46
75
|
@logger || CloudPubsub.logger
|
|
47
76
|
end
|