bbk-app 1.0.0.152254 → 1.1.0.199383
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 +2 -2
- data/lib/bbk/app/dispatcher.rb +37 -14
- data/lib/bbk/app/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: cfb0384af4545b59b59a7de1f309e71e895bf2af47ce0526bcf0265b54606c60
|
4
|
+
data.tar.gz: 7fb2b293747d66a4d818bacf32a8fb72f5c48e48f7937d1931e4c2e73472cdc1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17de92ea6e1492d94b66ad4af0efa83dc8ea43f4d3591250f39ae379323978e33da4541093b0d89451af71bb4e3bdfe820a50d30ebf938ad6bfc37ac07b679ca
|
7
|
+
data.tar.gz: '080cff24d3c3521d4c563433e001f6945571eb678849c2549ccc4a23148bd196e1f45164081e3a9c7dc295890b2552f5c960fb200cc3678fe797df11f352eff6'
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bbk-app (1.
|
4
|
+
bbk-app (1.1.0.199383)
|
5
5
|
activesupport
|
6
6
|
bbk-utils (> 1.0.1)
|
7
7
|
timeouter
|
@@ -122,7 +122,7 @@ GEM
|
|
122
122
|
virtus (~> 1.0)
|
123
123
|
russian (0.6.0)
|
124
124
|
i18n (>= 0.5.0)
|
125
|
-
set (1.0.
|
125
|
+
set (1.0.3)
|
126
126
|
sexp_processor (4.16.0)
|
127
127
|
simplecov (0.21.2)
|
128
128
|
docile (~> 1.1)
|
data/lib/bbk/app/dispatcher.rb
CHANGED
@@ -10,6 +10,8 @@ require 'bbk/utils/proxy_logger'
|
|
10
10
|
module BBK
|
11
11
|
module App
|
12
12
|
|
13
|
+
class InvalidAnswersMessagesCountError < StandardError; end
|
14
|
+
|
13
15
|
class SimplePoolFactory
|
14
16
|
|
15
17
|
def self.call(pool_size, queue_size)
|
@@ -32,7 +34,8 @@ module BBK
|
|
32
34
|
attr_accessor :force_quit
|
33
35
|
attr_reader :consumers, :publishers, :observer, :middlewares, :logger
|
34
36
|
|
35
|
-
ANSWER_DOMAIN = 'answer'
|
37
|
+
ANSWER_DOMAIN = 'answer'.freeze
|
38
|
+
DEFAULT_PROTOCOL = 'default'.freeze
|
36
39
|
|
37
40
|
def initialize(observer, pool_size: 3, logger: BBK::App.logger, pool_factory: SimplePoolFactory, stream_strategy: QueueStreamStrategy)
|
38
41
|
@observer = observer
|
@@ -52,9 +55,20 @@ module BBK
|
|
52
55
|
end
|
53
56
|
|
54
57
|
def register_publisher(publisher)
|
58
|
+
raise "Publisher support #{DEFAULT_PROTOCOL}" if publisher.protocols.include?(DEFAULT_PROTOCOL)
|
55
59
|
publishers << publisher
|
56
60
|
end
|
57
61
|
|
62
|
+
# set default publisher for results with empty scheme or DEFAULT_PROTOCOL scheme
|
63
|
+
def default_publisher=(publisher)
|
64
|
+
@default_publisher = publisher
|
65
|
+
end
|
66
|
+
|
67
|
+
# get default publisher
|
68
|
+
def default_publisher
|
69
|
+
@default_publisher || (publishers.size == 1 ? publishers.first : nil)
|
70
|
+
end
|
71
|
+
|
58
72
|
def register_middleware(middleware)
|
59
73
|
middlewares << middleware
|
60
74
|
end
|
@@ -122,18 +136,19 @@ module BBK
|
|
122
136
|
end
|
123
137
|
end
|
124
138
|
|
125
|
-
|
139
|
+
# process one message and sending existed results messages
|
140
|
+
def process(message)
|
141
|
+
results = execute_message(message)
|
142
|
+
logger.debug "There are #{results.count} results to send from #{message.headers[:message_id]}..."
|
143
|
+
send_results(message, results).value
|
144
|
+
rescue StandardError => e
|
145
|
+
logger.error "Failed processing message: #{e.inspect}"
|
146
|
+
ActiveSupport::Notifications.instrument 'dispatcher.exception', msg: message, exception: e
|
147
|
+
message.nack(error: e)
|
148
|
+
close if force_quit
|
149
|
+
end
|
126
150
|
|
127
|
-
|
128
|
-
results = execute_message(message)
|
129
|
-
logger.debug "There are #{results.count} results to send from #{message.headers[:message_id]}..."
|
130
|
-
send_results(message, results).value
|
131
|
-
rescue StandardError => e
|
132
|
-
logger.error "Failed processing message: #{e.inspect}"
|
133
|
-
ActiveSupport::Notifications.instrument 'dispatcher.exception', msg: message, exception: e
|
134
|
-
message.nack(error: e)
|
135
|
-
close if force_quit
|
136
|
-
end
|
151
|
+
protected
|
137
152
|
|
138
153
|
def process_message(message)
|
139
154
|
matched, processor = find_processor(message)
|
@@ -176,8 +191,12 @@ module BBK
|
|
176
191
|
def send_results(incoming, results)
|
177
192
|
message_id = incoming.headers[:message_id]
|
178
193
|
|
179
|
-
|
180
|
-
|
194
|
+
answers, sended_messages = results.partition { _1.route.domain == ANSWER_DOMAIN }
|
195
|
+
# allowed only one answer message
|
196
|
+
raise InvalidAnswersMessagesCountError.new("Get #{asnwers.size} on processing message with id=#{message_id}") if answers.size > 1
|
197
|
+
|
198
|
+
answer = answers.first
|
199
|
+
Concurrent::Promises.zip_futures(*sended_messages.map do |result|
|
181
200
|
publish_result(result)
|
182
201
|
end).then do |_successes|
|
183
202
|
incoming.ack(answer: answer)
|
@@ -203,6 +222,10 @@ module BBK
|
|
203
222
|
route = result.route
|
204
223
|
logger.debug "Publish result to #{route} ..."
|
205
224
|
publisher = publishers.find {|pub| pub.protocols.include?(route.scheme) }
|
225
|
+
if route.scheme.nil? || route.scheme == DEFAULT_PROTOCOL
|
226
|
+
logger.debug "Use default publisher for result with route=#{route}"
|
227
|
+
publisher = default_publisher
|
228
|
+
end
|
206
229
|
raise "Not found publisher for scheme #{route.scheme}" if publisher.nil?
|
207
230
|
|
208
231
|
# return Concurrent::Promises.resolvable_future
|
data/lib/bbk/app/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bbk-app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0.199383
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samoilenko Yuri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -320,7 +320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
320
320
|
- !ruby/object:Gem::Version
|
321
321
|
version: '0'
|
322
322
|
requirements: []
|
323
|
-
rubygems_version: 3.2.
|
323
|
+
rubygems_version: 3.2.33
|
324
324
|
signing_key:
|
325
325
|
specification_version: 4
|
326
326
|
summary: Classes for building services based on BBK stack
|