bbk-app 1.0.0.152254 → 1.1.0.199383
Sign up to get free protection for your applications and to get access to all the features.
- 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
|