manageiq-messaging 1.0.0 → 1.1.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 +4 -4
- data/.codeclimate.yml +25 -30
- data/.rubocop.yml +3 -3
- data/.rubocop_cc.yml +3 -4
- data/.travis.yml +6 -5
- data/.whitesource +3 -0
- data/CHANGES +14 -0
- data/Gemfile +7 -0
- data/README.md +13 -1
- data/lib/manageiq/messaging/client.rb +6 -4
- data/lib/manageiq/messaging/kafka/client.rb +13 -7
- data/lib/manageiq/messaging/kafka/common.rb +2 -5
- data/lib/manageiq/messaging/kafka/queue.rb +2 -2
- data/lib/manageiq/messaging/kafka/topic.rb +3 -2
- data/lib/manageiq/messaging/stomp/topic.rb +5 -1
- data/lib/manageiq/messaging/version.rb +1 -1
- data/lib/manageiq/messaging.rb +1 -0
- data/manageiq-messaging.gemspec +2 -3
- metadata +27 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7dd9c250d5717fe5eff8c8d84483a3b6ee4286026584beffa2a9f2491b968901
|
4
|
+
data.tar.gz: 12560dc540325e6681757934f5842497e19890c5c55747f5a06b3265591e8fa1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a46c52b888a699c483c81c19a9e1287b8dbde9a2aa3e4f7c30b220775a398b81d9fc7ea6b846b66c186ed1a83461395898bf010412e23427b8e271b7c73f349d
|
7
|
+
data.tar.gz: 2a5ae4e0b8ef60fd8f3d18c132719a91a2a9d0c940c01f241e1e30555d993e3b609c966895e0b135e17534d74e9f1680bd3e244d3689471b36d1a50af46ef07a
|
data/.codeclimate.yml
CHANGED
@@ -1,18 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
-
|
4
|
-
|
5
|
-
-
|
6
|
-
|
7
|
-
-
|
8
|
-
|
9
|
-
-
|
10
|
-
|
1
|
+
prepare:
|
2
|
+
fetch:
|
3
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/.rubocop_base.yml
|
4
|
+
path: ".rubocop_base.yml"
|
5
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/.rubocop_cc_base.yml
|
6
|
+
path: ".rubocop_cc_base.yml"
|
7
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/styles/base.yml
|
8
|
+
path: styles/base.yml
|
9
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/styles/cc_base.yml
|
10
|
+
path: styles/cc_base.yml
|
11
|
+
plugins:
|
12
|
+
rubocop:
|
13
|
+
enabled: true
|
14
|
+
config: ".rubocop_cc.yml"
|
15
|
+
channel: rubocop-0-82
|
11
16
|
brakeman:
|
12
|
-
# very slow :sad_panda:
|
13
17
|
enabled: false
|
14
18
|
bundler-audit:
|
15
|
-
# requires Gemfile.lock
|
16
19
|
enabled: false
|
17
20
|
csslint:
|
18
21
|
enabled: false
|
@@ -24,25 +27,17 @@ engines:
|
|
24
27
|
- javascript
|
25
28
|
eslint:
|
26
29
|
enabled: false
|
27
|
-
channel:
|
30
|
+
channel: eslint-3
|
28
31
|
fixme:
|
29
|
-
# let's enable later
|
30
32
|
enabled: false
|
31
33
|
markdownlint:
|
32
|
-
# let's enable later
|
33
34
|
enabled: false
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
path: ".rubocop_cc_base.yml"
|
44
|
-
ratings:
|
45
|
-
paths:
|
46
|
-
- Gemfile.lock
|
47
|
-
- "**.rake"
|
48
|
-
- "**.rb"
|
35
|
+
exclude_patterns:
|
36
|
+
- ".git/"
|
37
|
+
- "**.xml"
|
38
|
+
- "**.yaml"
|
39
|
+
- "**.yml"
|
40
|
+
- locale/
|
41
|
+
- spec/
|
42
|
+
- tools/
|
43
|
+
version: '2'
|
data/.rubocop.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
+
inherit_gem:
|
2
|
+
manageiq-style: ".rubocop_base.yml"
|
1
3
|
inherit_from:
|
2
|
-
-
|
3
|
-
# put all local rubocop config into .rubocop_local.yml as it will be loaded by .rubocop_cc.yml as well
|
4
|
-
- .rubocop_local.yml
|
4
|
+
- ".rubocop_local.yml"
|
data/.rubocop_cc.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
sudo: false
|
2
1
|
language: ruby
|
3
2
|
rvm:
|
4
|
-
|
5
|
-
|
6
|
-
- 2.6.5
|
3
|
+
- 2.6.9
|
4
|
+
- 2.7.5
|
7
5
|
before_install: gem install bundler -v 1.13.0
|
8
6
|
after_script: bundle exec codeclimate-test-reporter
|
9
|
-
sudo: false
|
10
7
|
cache: bundler
|
8
|
+
env:
|
9
|
+
matrix:
|
10
|
+
- TEST_RAILS_VERSION=6.1
|
11
|
+
- TEST_RAILS_VERSION=6.0
|
data/.whitesource
ADDED
data/CHANGES
CHANGED
@@ -20,3 +20,17 @@
|
|
20
20
|
|
21
21
|
= 1.0.0 - 28-Sep-2020
|
22
22
|
* Switch to use rdkafka client
|
23
|
+
|
24
|
+
= 1.0.1 - 15-Dec-2020
|
25
|
+
* Allow all kafka options to be passed
|
26
|
+
* remove sudo:false from .travis.yml
|
27
|
+
* Use manageiq-style
|
28
|
+
|
29
|
+
= 1.0.2 - 4-Jan-2021
|
30
|
+
* Rails 6.0 Support
|
31
|
+
|
32
|
+
= 1.0.3 - 12-May-2021
|
33
|
+
* Allow bulk publish of messages to a topic
|
34
|
+
|
35
|
+
= 1.1.0 - 09-Feb-2022
|
36
|
+
* Allow rails 6.1
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
[](https://travis-ci.com/ManageIQ/manageiq-messaging)
|
5
5
|
[](https://codeclimate.com/github/ManageIQ/manageiq-messaging)
|
6
6
|
[](https://codeclimate.com/github/ManageIQ/manageiq-messaging/coverage)
|
7
|
-
[](https://hakiri.io/github/ManageIQ/manageiq-messaging/master)
|
8
7
|
|
9
8
|
Client library for ManageIQ components to exchange messages through its internal message bus.
|
10
9
|
|
@@ -155,6 +154,19 @@ This is the one-to-many publish/subscribe pattern. Multiple subscribers can subs
|
|
155
154
|
|
156
155
|
By default, events are delivered to live subscribers only. Some messaging systems support persistence with options.
|
157
156
|
|
157
|
+
### Publish bulk messages to a topic
|
158
|
+
|
159
|
+
Often it is more efficient to publish messages in bulk rather than one-at-a-time. To do this you can pass an array of messages to the `publish_topic` API:
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
client.publish_topic(
|
163
|
+
[
|
164
|
+
{:service => 'provider_events', :event => 'powered_off', :payload => {:ems_ref => 'uid987', :timestamp => '1501091391'}},
|
165
|
+
{:service => 'provider_events', :event => 'powered_on', :payload => {:ems_ref => 'uid987', :timestamp => '1501091429'}},
|
166
|
+
]
|
167
|
+
)
|
168
|
+
```
|
169
|
+
|
158
170
|
### Add your own headers to a message (Queue or Topic)
|
159
171
|
|
160
172
|
If you want you can add in your own headers to the send message
|
@@ -161,7 +161,8 @@ module ManageIQ
|
|
161
161
|
end
|
162
162
|
|
163
163
|
# Publish a message as a topic. All subscribers will receive a copy of the message.
|
164
|
-
#
|
164
|
+
# +messages+ can be either a hash or an array of hashes.
|
165
|
+
# Expected keys are:
|
165
166
|
# * :service (service is used to determine the topic address)
|
166
167
|
# * :event (event name)
|
167
168
|
# * :payload (message body, a string or an user object that can be serialized)
|
@@ -169,10 +170,11 @@ module ManageIQ
|
|
169
170
|
# * :headers (optional, additional headers to add to the message)
|
170
171
|
# Other options are underlying messaging system specific.
|
171
172
|
#
|
172
|
-
def publish_topic(
|
173
|
-
|
173
|
+
def publish_topic(messages)
|
174
|
+
messages = Array.wrap(messages)
|
175
|
+
messages.each { |msg| assert_options(msg, [:event, :service]) }
|
174
176
|
|
175
|
-
publish_topic_impl(
|
177
|
+
publish_topic_impl(messages)
|
176
178
|
end
|
177
179
|
|
178
180
|
# Subscribe to receive topic type messages.
|
@@ -76,17 +76,23 @@ module ManageIQ
|
|
76
76
|
attr_reader :kafka_client
|
77
77
|
|
78
78
|
def initialize(options)
|
79
|
-
hosts = Array(options[:hosts] || options[:host])
|
80
|
-
hosts.collect! { |host| "#{host}:#{options[:port]}" }
|
81
|
-
|
82
79
|
@encoding = options[:encoding] || 'yaml'
|
83
80
|
require "json" if @encoding == "json"
|
84
81
|
|
85
|
-
connection_opts = {:"bootstrap.servers" => hosts.join(',')}
|
86
|
-
connection_opts[:"client.id"] = options[:client_ref] if options[:client_ref]
|
87
|
-
|
88
82
|
::Rdkafka::Config.logger = logger
|
89
|
-
@kafka_client = ::Rdkafka::Config.new(
|
83
|
+
@kafka_client = ::Rdkafka::Config.new(rdkafka_connection_opts(options))
|
84
|
+
end
|
85
|
+
|
86
|
+
def rdkafka_connection_opts(options)
|
87
|
+
hosts = Array(options[:hosts] || options[:host])
|
88
|
+
hosts.collect! { |host| "#{host}:#{options[:port]}" }
|
89
|
+
|
90
|
+
result = {:"bootstrap.servers" => hosts.join(',')}
|
91
|
+
result[:"client.id"] = options[:client_ref] if options[:client_ref]
|
92
|
+
result[:"sasl.username"] = options[:username] if options[:username]
|
93
|
+
result[:"sasl.password"] = options[:password] if options[:password]
|
94
|
+
|
95
|
+
result.merge(options.except(:port, :host, :hosts, :encoding, :protocol, :client_ref, :username, :password))
|
90
96
|
end
|
91
97
|
end
|
92
98
|
end
|
@@ -21,12 +21,9 @@ module ManageIQ
|
|
21
21
|
@consumer = kafka_client.consumer
|
22
22
|
end
|
23
23
|
|
24
|
-
def raw_publish(
|
24
|
+
def raw_publish(body, options)
|
25
25
|
options[:payload] = encode_body(options[:headers], body)
|
26
|
-
producer.produce(options)
|
27
|
-
handle.wait if wait
|
28
|
-
logger.info("Published to topic(#{options[:topic]}), msg(#{payload_log(body.inspect)})")
|
29
|
-
end
|
26
|
+
producer.produce(options)
|
30
27
|
end
|
31
28
|
|
32
29
|
def queue_for_publish(options)
|
@@ -8,11 +8,11 @@ module ManageIQ
|
|
8
8
|
|
9
9
|
def publish_message_impl(options)
|
10
10
|
raise ArgumentError, "Kafka messaging implementation does not take a block" if block_given?
|
11
|
-
raw_publish(
|
11
|
+
raw_publish(*queue_for_publish(options)).wait
|
12
12
|
end
|
13
13
|
|
14
14
|
def publish_messages_impl(messages)
|
15
|
-
handles = messages.collect { |msg_options| raw_publish(
|
15
|
+
handles = messages.collect { |msg_options| raw_publish(*queue_for_publish(msg_options)) }
|
16
16
|
handles.each(&:wait)
|
17
17
|
end
|
18
18
|
|
@@ -8,8 +8,9 @@ module ManageIQ
|
|
8
8
|
|
9
9
|
private
|
10
10
|
|
11
|
-
def publish_topic_impl(
|
12
|
-
raw_publish(
|
11
|
+
def publish_topic_impl(messages)
|
12
|
+
handles = messages.collect { |message| raw_publish(*topic_for_publish(message)) }
|
13
|
+
handles.each(&:wait)
|
13
14
|
end
|
14
15
|
|
15
16
|
def subscribe_topic_impl(options, &block)
|
@@ -4,7 +4,7 @@ module ManageIQ
|
|
4
4
|
module Topic
|
5
5
|
private
|
6
6
|
|
7
|
-
def
|
7
|
+
def publish_topic_single(options)
|
8
8
|
address, headers = topic_for_publish(options)
|
9
9
|
headers[:sender] = options[:sender] if options[:sender]
|
10
10
|
headers[:event_type] = options[:event] if options[:event]
|
@@ -12,6 +12,10 @@ module ManageIQ
|
|
12
12
|
raw_publish(address, options[:payload], headers)
|
13
13
|
end
|
14
14
|
|
15
|
+
def publish_topic_impl(messages)
|
16
|
+
messages.each { |message| publish_topic_single(message) }
|
17
|
+
end
|
18
|
+
|
15
19
|
def subscribe_topic_impl(options)
|
16
20
|
queue_name, headers = topic_for_subscribe(options)
|
17
21
|
|
data/lib/manageiq/messaging.rb
CHANGED
data/manageiq-messaging.gemspec
CHANGED
@@ -21,15 +21,14 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_dependency 'activesupport', '
|
24
|
+
spec.add_dependency 'activesupport', '>= 5.2.4.3', "< 7.0"
|
25
25
|
spec.add_dependency 'rdkafka', '~> 0.8'
|
26
26
|
spec.add_dependency 'stomp', '~> 1.4.4'
|
27
27
|
|
28
28
|
spec.add_development_dependency "bundler"
|
29
29
|
spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0.0"
|
30
|
+
spec.add_development_dependency "manageiq-style"
|
30
31
|
spec.add_development_dependency "rake", ">= 12.3.3"
|
31
32
|
spec.add_development_dependency "rspec", "~> 3.0"
|
32
|
-
spec.add_development_dependency "rubocop"
|
33
|
-
spec.add_development_dependency "rubocop-performance"
|
34
33
|
spec.add_development_dependency "simplecov"
|
35
34
|
end
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manageiq-messaging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ManageIQ Authors
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 5.2.4.3
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '7.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 5.2.4.3
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '7.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rdkafka
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,61 +87,47 @@ dependencies:
|
|
81
87
|
- !ruby/object:Gem::Version
|
82
88
|
version: 1.0.0
|
83
89
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
90
|
+
name: manageiq-style
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
93
|
- - ">="
|
88
94
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
95
|
+
version: '0'
|
90
96
|
type: :development
|
91
97
|
prerelease: false
|
92
98
|
version_requirements: !ruby/object:Gem::Requirement
|
93
99
|
requirements:
|
94
100
|
- - ">="
|
95
101
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rspec
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '3.0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '3.0'
|
102
|
+
version: '0'
|
111
103
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
104
|
+
name: rake
|
113
105
|
requirement: !ruby/object:Gem::Requirement
|
114
106
|
requirements:
|
115
107
|
- - ">="
|
116
108
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
109
|
+
version: 12.3.3
|
118
110
|
type: :development
|
119
111
|
prerelease: false
|
120
112
|
version_requirements: !ruby/object:Gem::Requirement
|
121
113
|
requirements:
|
122
114
|
- - ">="
|
123
115
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
116
|
+
version: 12.3.3
|
125
117
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
118
|
+
name: rspec
|
127
119
|
requirement: !ruby/object:Gem::Requirement
|
128
120
|
requirements:
|
129
|
-
- - "
|
121
|
+
- - "~>"
|
130
122
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
123
|
+
version: '3.0'
|
132
124
|
type: :development
|
133
125
|
prerelease: false
|
134
126
|
version_requirements: !ruby/object:Gem::Requirement
|
135
127
|
requirements:
|
136
|
-
- - "
|
128
|
+
- - "~>"
|
137
129
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
130
|
+
version: '3.0'
|
139
131
|
- !ruby/object:Gem::Dependency
|
140
132
|
name: simplecov
|
141
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,7 +144,7 @@ dependencies:
|
|
152
144
|
version: '0'
|
153
145
|
description: Client library for ManageIQ components to exchange messages through its
|
154
146
|
internal message bus.
|
155
|
-
email:
|
147
|
+
email:
|
156
148
|
executables: []
|
157
149
|
extensions: []
|
158
150
|
extra_rdoc_files: []
|
@@ -164,6 +156,7 @@ files:
|
|
164
156
|
- ".rubocop_cc.yml"
|
165
157
|
- ".rubocop_local.yml"
|
166
158
|
- ".travis.yml"
|
159
|
+
- ".whitesource"
|
167
160
|
- CHANGES
|
168
161
|
- CODE_OF_CONDUCT.md
|
169
162
|
- Gemfile
|
@@ -200,7 +193,7 @@ homepage: http://github.com/ManageIQ/manageiq-messaging
|
|
200
193
|
licenses:
|
201
194
|
- MIT
|
202
195
|
metadata: {}
|
203
|
-
post_install_message:
|
196
|
+
post_install_message:
|
204
197
|
rdoc_options: []
|
205
198
|
require_paths:
|
206
199
|
- lib
|
@@ -215,8 +208,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
208
|
- !ruby/object:Gem::Version
|
216
209
|
version: '0'
|
217
210
|
requirements: []
|
218
|
-
rubygems_version: 3.
|
219
|
-
signing_key:
|
211
|
+
rubygems_version: 3.3.5
|
212
|
+
signing_key:
|
220
213
|
specification_version: 4
|
221
214
|
summary: Client library for ManageIQ components to exchange messages through its internal
|
222
215
|
message bus.
|