manageiq-messaging 0.1.3 → 0.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 +4 -4
- data/CHANGES +4 -0
- data/README.md +1 -1
- data/examples/message.rb +1 -1
- data/lib/manageiq/messaging/client.rb +6 -6
- data/lib/manageiq/messaging/kafka/client.rb +2 -0
- data/lib/manageiq/messaging/kafka/common.rb +13 -5
- data/lib/manageiq/messaging/kafka/queue.rb +3 -2
- data/lib/manageiq/messaging/kafka/topic.rb +3 -2
- data/lib/manageiq/messaging/received_message.rb +7 -3
- data/lib/manageiq/messaging/stomp/queue.rb +1 -1
- data/lib/manageiq/messaging/stomp/topic.rb +1 -1
- data/lib/manageiq/messaging/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78b0fa6b782a5bb3e21552abd1c0b54f473bdc460c722f896a7fecc7389259b3
|
4
|
+
data.tar.gz: f0ff3e82e5108b2241cebcfb2cbf9dde8208c3cf21e61b355d1cec9292562a64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 331823865454b700433699cb00f8938311ba91cf0ad87a807ffbc955be6e2d7060e5fc3fabbe91fea5f52b72eaf74a49d0909e94a63a665ccb2f44f9e56f76a0
|
7
|
+
data.tar.gz: a3e6c91fc5ba3a476908d26baf2f5cb3d1d4c768d63e69d3e318442b35f4bf71a3cf501d9dc12bbd53cdba66121f19d2c87ec14dd7eabc19a8aa4aefa40dc302
|
data/CHANGES
CHANGED
@@ -7,3 +7,7 @@
|
|
7
7
|
|
8
8
|
= 0.1.2 - 11-Dec-2018
|
9
9
|
* Allow to set max_bytes to each_batch when subscribe to a Kafka topic.
|
10
|
+
|
11
|
+
= 0.1.4 - 3-Apr-2019
|
12
|
+
* Add an #ack method to a ReceivedMessage to simplify manual acknowledgements
|
13
|
+
* Allow caller to provide a session_timeout to kafka consumers, default of 30sec
|
data/README.md
CHANGED
@@ -83,7 +83,7 @@ This is the one-to-one publish/subscribe pattern. Multiple subscribers can subsc
|
|
83
83
|
client.subscribe_messages(:service => 'ems_operation', :affinity => 'ems_amazon1', :auto_ack => false) do |messages|
|
84
84
|
messages.each do |msg|
|
85
85
|
# do stuff with msg.message and msg.payload
|
86
|
-
|
86
|
+
msg.ack
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
data/examples/message.rb
CHANGED
@@ -106,9 +106,9 @@ module ManageIQ
|
|
106
106
|
# msg.sender
|
107
107
|
# msg.message
|
108
108
|
# msg.payload
|
109
|
-
# msg.ack_ref
|
109
|
+
# msg.ack_ref
|
110
110
|
#
|
111
|
-
#
|
111
|
+
# msg.ack # needed only when options[:auto_ack] is false
|
112
112
|
# # process the message
|
113
113
|
# end
|
114
114
|
# end
|
@@ -122,7 +122,7 @@ module ManageIQ
|
|
122
122
|
# message is proccessed. Any un-acked message will be redelivered to next subscriber
|
123
123
|
# AFTER the current subscriber disconnects normally or abnormally (e.g. crashed).
|
124
124
|
#
|
125
|
-
# To ack a message call +
|
125
|
+
# To ack a message call +msg.ack+
|
126
126
|
def subscribe_messages(options, &block)
|
127
127
|
raise "A block is required" unless block_given?
|
128
128
|
assert_options(options, [:service])
|
@@ -189,9 +189,9 @@ module ManageIQ
|
|
189
189
|
# msg.sender
|
190
190
|
# msg.message
|
191
191
|
# msg.payload
|
192
|
-
# msg.ack_ref
|
192
|
+
# msg.ack_ref
|
193
193
|
#
|
194
|
-
#
|
194
|
+
# msg.ack # needed only when options[:auto_ack] is false
|
195
195
|
# # process the message
|
196
196
|
# end
|
197
197
|
#
|
@@ -204,7 +204,7 @@ module ManageIQ
|
|
204
204
|
# message is proccessed. Any un-acked message will be redelivered to next subscriber
|
205
205
|
# AFTER the current subscriber disconnects normally or abnormally (e.g. crashed).
|
206
206
|
#
|
207
|
-
# To ack a message call +
|
207
|
+
# To ack a message call +msg.ack+
|
208
208
|
def subscribe_topic(options, &block)
|
209
209
|
raise "A block is required" unless block_given?
|
210
210
|
assert_options(options, [:service])
|
@@ -26,9 +26,11 @@ module ManageIQ
|
|
26
26
|
#
|
27
27
|
# Kafka specific +subscribe_topic+ options:
|
28
28
|
# * :persist_ref (Used as Kafka group_id)
|
29
|
+
# * :session_timeout (Max time in seconds allowed to process a message, default is 30)
|
29
30
|
#
|
30
31
|
# Kafka specific +subscribe_messages+ options:
|
31
32
|
# * :max_bytes (Max batch size to read, default is 10Mb)
|
33
|
+
# * :session_timeout (Max time in seconds allowed to process a message, default is 30)
|
32
34
|
#
|
33
35
|
# Without +:persist_ref+ every topic subscriber receives a copy of each message
|
34
36
|
# only when they are active. If multiple topic subscribers join with the same
|
@@ -13,19 +13,27 @@ module ManageIQ
|
|
13
13
|
@producer ||= kafka_client.producer
|
14
14
|
end
|
15
15
|
|
16
|
-
def topic_consumer(persist_ref)
|
16
|
+
def topic_consumer(persist_ref, session_timeout = nil)
|
17
17
|
# persist_ref enables consumer to receive messages sent when consumer is temporarily offline
|
18
18
|
# it also enables consumers to do load balancing when multiple consumers join the with the same ref.
|
19
19
|
@topic_consumer.try(:stop) unless @persist_ref == persist_ref
|
20
20
|
@persist_ref = persist_ref
|
21
|
-
|
21
|
+
|
22
|
+
consumer_opts = {:group_id => persist_ref}
|
23
|
+
consumer_opts[:session_timeout] = session_timeout if session_timeout.present?
|
24
|
+
|
25
|
+
@topic_consumer ||= kafka_client.consumer(consumer_opts)
|
22
26
|
end
|
23
27
|
|
24
|
-
def queue_consumer(topic)
|
28
|
+
def queue_consumer(topic, session_timeout = nil)
|
25
29
|
# all queue consumers join the same group so that each message can be processed by one and only one consumer
|
26
30
|
@queue_consumer.try(:stop) unless @queue_topic == topic
|
27
31
|
@queue_topic = topic
|
28
|
-
|
32
|
+
|
33
|
+
consumer_opts = {:group_id => GROUP_FOR_QUEUE_MESSAGES + topic}
|
34
|
+
consumer_opts[:session_timeout] = session_timeout if session_timeout.present?
|
35
|
+
|
36
|
+
@queue_consumer ||= kafka_client.consumer(consumer_opts)
|
29
37
|
end
|
30
38
|
|
31
39
|
trap("TERM") do
|
@@ -86,7 +94,7 @@ module ManageIQ
|
|
86
94
|
payload = decode_body(message.headers, message.value)
|
87
95
|
sender, event_type = parse_event_headers(message.headers)
|
88
96
|
logger.info("Event received: topic(#{topic}), event(#{payload_log(payload)}), sender(#{sender}), type(#{event_type})")
|
89
|
-
yield ManageIQ::Messaging::ReceivedMessage.new(sender, event_type, payload, message)
|
97
|
+
yield ManageIQ::Messaging::ReceivedMessage.new(sender, event_type, payload, message, self)
|
90
98
|
logger.info("Event processed")
|
91
99
|
rescue StandardError => e
|
92
100
|
logger.error("Event processing error: #{e.message}")
|
@@ -16,19 +16,20 @@ module ManageIQ
|
|
16
16
|
|
17
17
|
def subscribe_messages_impl(options)
|
18
18
|
topic = address(options)
|
19
|
+
session_timeout = options[:session_timeout]
|
19
20
|
|
20
21
|
batch_options = {}
|
21
22
|
batch_options[:automatically_mark_as_processed] = auto_ack?(options)
|
22
23
|
batch_options[:max_bytes] = options[:max_bytes] if options.key?(:max_bytes)
|
23
24
|
|
24
|
-
consumer = queue_consumer(topic)
|
25
|
+
consumer = queue_consumer(topic, session_timeout)
|
25
26
|
consumer.subscribe(topic)
|
26
27
|
consumer.each_batch(batch_options) do |batch|
|
27
28
|
logger.info("Batch message received: queue(#{topic})")
|
28
29
|
begin
|
29
30
|
messages = batch.messages.collect do |message|
|
30
31
|
sender, message_type, _class_name, payload = process_queue_message(topic, message)
|
31
|
-
ManageIQ::Messaging::ReceivedMessage.new(sender, message_type, payload, message)
|
32
|
+
ManageIQ::Messaging::ReceivedMessage.new(sender, message_type, payload, message, self)
|
32
33
|
end
|
33
34
|
|
34
35
|
yield messages
|
@@ -10,10 +10,11 @@ module ManageIQ
|
|
10
10
|
|
11
11
|
def subscribe_topic_impl(options, &block)
|
12
12
|
topic = address(options)
|
13
|
-
persist_ref
|
13
|
+
persist_ref = options[:persist_ref]
|
14
|
+
session_timeout = options[:session_timeout]
|
14
15
|
|
15
16
|
if persist_ref
|
16
|
-
consumer = topic_consumer(persist_ref)
|
17
|
+
consumer = topic_consumer(persist_ref, session_timeout)
|
17
18
|
consumer.subscribe(topic, :start_from_beginning => false)
|
18
19
|
consumer.each_message(:automatically_mark_as_processed => auto_ack?(options)) do |message|
|
19
20
|
process_topic_message(topic, message, &block)
|
@@ -1,10 +1,14 @@
|
|
1
1
|
module ManageIQ
|
2
2
|
module Messaging
|
3
3
|
class ReceivedMessage
|
4
|
-
attr_accessor :sender, :message, :payload, :ack_ref
|
4
|
+
attr_accessor :sender, :message, :payload, :ack_ref, :client
|
5
5
|
|
6
|
-
def initialize(sender, message, payload, ack_ref)
|
7
|
-
@sender, @message, @payload, @ack_ref = sender, message, payload, ack_ref
|
6
|
+
def initialize(sender, message, payload, ack_ref, client)
|
7
|
+
@sender, @message, @payload, @ack_ref, @client = sender, message, payload, ack_ref, client
|
8
|
+
end
|
9
|
+
|
10
|
+
def ack
|
11
|
+
client.ack(ack_ref)
|
8
12
|
end
|
9
13
|
end
|
10
14
|
end
|
@@ -35,7 +35,7 @@ module ManageIQ
|
|
35
35
|
message_body = decode_body(msg.headers, msg.body)
|
36
36
|
logger.info("Message received: queue(#{queue_name}), msg(#{payload_log(message_body)}), headers(#{msg.headers})")
|
37
37
|
|
38
|
-
result = yield [ManageIQ::Messaging::ReceivedMessage.new(sender, message_type, message_body, msg)]
|
38
|
+
result = yield [ManageIQ::Messaging::ReceivedMessage.new(sender, message_type, message_body, msg, self)]
|
39
39
|
logger.info("Message processed")
|
40
40
|
|
41
41
|
correlation_ref = msg.headers['correlation_id']
|
@@ -23,7 +23,7 @@ module ManageIQ
|
|
23
23
|
event_type = event.headers['event_type']
|
24
24
|
event_body = decode_body(event.headers, event.body)
|
25
25
|
logger.info("Event received: queue(#{queue_name}), event(#{event_body}), headers(#{event.headers})")
|
26
|
-
yield ManageIQ::Messaging::ReceivedMessage.new(sender, event_type, event_body, event)
|
26
|
+
yield ManageIQ::Messaging::ReceivedMessage.new(sender, event_type, event_body, event, self)
|
27
27
|
logger.info("Event processed")
|
28
28
|
rescue => e
|
29
29
|
logger.error("Event processing error: #{e.message}")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manageiq-messaging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ManageIQ Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -202,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
202
|
version: '0'
|
203
203
|
requirements: []
|
204
204
|
rubyforge_project:
|
205
|
-
rubygems_version: 2.7.6
|
205
|
+
rubygems_version: 2.7.6.2
|
206
206
|
signing_key:
|
207
207
|
specification_version: 4
|
208
208
|
summary: Client library for ManageIQ components to exchange messages through its internal
|