manageiq-messaging 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://travis-ci.com/ManageIQ/manageiq-messaging.svg)](https://travis-ci.com/ManageIQ/manageiq-messaging)
|
5
5
|
[![Code Climate](https://codeclimate.com/github/ManageIQ/manageiq-messaging.svg)](https://codeclimate.com/github/ManageIQ/manageiq-messaging)
|
6
6
|
[![Test Coverage](https://codeclimate.com/github/ManageIQ/manageiq-messaging/badges/coverage.svg)](https://codeclimate.com/github/ManageIQ/manageiq-messaging/coverage)
|
7
|
-
[![Security](https://hakiri.io/github/ManageIQ/manageiq-messaging/master.svg)](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.
|