pub_sub_model_sync 1.5.0 → 1.5.1pre
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/README.md +2 -0
- data/lib/pub_sub_model_sync/message_processor.rb +6 -2
- data/lib/pub_sub_model_sync/publisher_concern.rb +4 -2
- data/lib/pub_sub_model_sync/service_base.rb +6 -1
- data/lib/pub_sub_model_sync/version.rb +1 -1
- data/pub_sub_model_sync.gemspec +5 -2
- metadata +14 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55d5a541d463ac4b23a26bbcb2ba14f5c4d6336d72bde40d1ea9c1ff5bc4b89f
|
4
|
+
data.tar.gz: 496ed96aacf2c6ab74ffb4f997b00cfffc76168f168647f94fec3fa57bc3ae59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 199e1c3841b4038ec67b189b2da974655d7ce87c637297b59c646628e7cba0359f64f11e8b1e0c4d3db65827ffa3a4f81fb52492bb0e5c40e1f9438b894135a6
|
7
|
+
data.tar.gz: 951e65c9e9e7d109b5c3fe9c7e79ffb00ebe7110bbdd7d15c93a1a5c83e460a0512292bfe21b87fc8bba5d11dcf79c75af2723cfc0b61cacef8f6f812cab9834
|
data/README.md
CHANGED
@@ -536,6 +536,8 @@ config.debug = true
|
|
536
536
|
(Proc) => called after publishing a notification
|
537
537
|
- ```.on_error_publish = ->(exception, {payload:}) { payload.delay(...).publish! }```
|
538
538
|
(Proc) => called when failed publishing a notification (delayed_job or similar can be used for retrying)
|
539
|
+
- ```.skip_cache = false```
|
540
|
+
(true/false*) => Allow to skip payload optimization (cache settings)
|
539
541
|
- ```.transactions_max_buffer = 1``` (Integer, default 1) Controls the maximum quantity of notifications to be enqueued to the transaction-buffer before delivering them and thus adds the ability to rollback notifications if the transaction fails.
|
540
542
|
Once this quantity of notifications is reached, then all notifications of the current transaction will immediately be delivered (can be customized per transaction).
|
541
543
|
Note: There is no way to rollback delivered notifications if current transaction fails later.
|
@@ -59,13 +59,17 @@ module PubSubModelSync
|
|
59
59
|
raise(e)
|
60
60
|
end
|
61
61
|
|
62
|
+
# @param error [StandardError]
|
62
63
|
def lost_db_connection?(error)
|
63
|
-
|
64
|
-
|
64
|
+
classes = %w[ActiveRecord::ConnectionTimeoutError PG::UnableToSend ActiveRecord::ConnectionNotEstablished]
|
65
|
+
classes.include?(error.class.name) || error.message.match?(/Lost connection to MySQL server/i)
|
65
66
|
end
|
66
67
|
|
67
68
|
def retry_process?(error, retries) # rubocop:disable Metrics/MethodLength
|
68
69
|
error_payload = [payload, error.message, error.backtrace]
|
70
|
+
if error.message.include('Connection refused') || error.message.include('no connection to the server')
|
71
|
+
log("Error pubsub: #{[error.class.name, error.message]} (retries: #{retries}) => #{lost_db_connection?(error)}", :error)
|
72
|
+
end
|
69
73
|
return false unless lost_db_connection?(error)
|
70
74
|
|
71
75
|
if retries <= 5
|
@@ -38,8 +38,10 @@ module PubSubModelSync
|
|
38
38
|
|
39
39
|
# Permits to perform manually the callback for a specific action
|
40
40
|
# @param action (Symbol, default: :create) Only :create|:update|:destroy
|
41
|
-
def ps_perform_publish(action = :create)
|
42
|
-
|
41
|
+
def ps_perform_publish(action = :create, parents_actions: false)
|
42
|
+
parent_callbacks = parents_actions ? self.class.superclass.ps_cache_publish_callbacks : []
|
43
|
+
callbacks = self.class.ps_cache_publish_callbacks
|
44
|
+
items = (callbacks + parent_callbacks).select { |item| item[:actions].include?(action) }
|
43
45
|
raise(StandardError, "No callback found for action :#{action}") if items.empty?
|
44
46
|
|
45
47
|
items.each { |item| instance_exec(action, &item[:callback]) }
|
@@ -34,7 +34,7 @@ module PubSubModelSync
|
|
34
34
|
def process_message(payload_info)
|
35
35
|
payload = decode_payload(payload_info)
|
36
36
|
return unless payload
|
37
|
-
return if same_app_message?(payload)
|
37
|
+
return if same_app_message?(payload) || !target_app_message?(payload)
|
38
38
|
|
39
39
|
payload.process
|
40
40
|
end
|
@@ -57,5 +57,10 @@ module PubSubModelSync
|
|
57
57
|
log("Skipping message from same origin: #{[payload]}") if res && config.debug
|
58
58
|
res
|
59
59
|
end
|
60
|
+
|
61
|
+
def target_app_message?(payload)
|
62
|
+
key = payload.headers[:target_app_key]
|
63
|
+
key == config.subscription_key || !key
|
64
|
+
end
|
60
65
|
end
|
61
66
|
end
|
data/pub_sub_model_sync.gemspec
CHANGED
@@ -11,8 +11,11 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.authors = ['Owen']
|
12
12
|
spec.email = ['owenperedo@gmail.com']
|
13
13
|
|
14
|
-
spec.summary = '
|
15
|
-
|
14
|
+
spec.summary = 'This gem permits to sync automatically models and custom data between multiple Rails
|
15
|
+
applications by publishing notifications via pubsub (Google PubSub, RabbitMQ, or Apache Kafka) and automatically
|
16
|
+
processed by all connected applications. Out of the scope, this gem includes transactions to keep Data consistency
|
17
|
+
by processing notifications in the order they were delivered.'
|
18
|
+
spec.description = spec.summary
|
16
19
|
spec.homepage = 'https://github.com/owen2345/pub_sub_model_sync'
|
17
20
|
spec.license = 'MIT'
|
18
21
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pub_sub_model_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.1pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -80,7 +80,11 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description:
|
83
|
+
description: This gem permits to sync automatically models and custom data between
|
84
|
+
multiple Rails applications by publishing notifications via pubsub (Google PubSub,
|
85
|
+
RabbitMQ, or Apache Kafka) and automatically processed by all connected applications.
|
86
|
+
Out of the scope, this gem includes transactions to keep Data consistency by processing
|
87
|
+
notifications in the order they were delivered.
|
84
88
|
email:
|
85
89
|
- owenperedo@gmail.com
|
86
90
|
executables: []
|
@@ -152,12 +156,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
156
|
version: '2.4'
|
153
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
158
|
requirements:
|
155
|
-
- - "
|
159
|
+
- - ">"
|
156
160
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
161
|
+
version: 1.3.1
|
158
162
|
requirements: []
|
159
163
|
rubygems_version: 3.0.8
|
160
164
|
signing_key:
|
161
165
|
specification_version: 4
|
162
|
-
summary:
|
166
|
+
summary: This gem permits to sync automatically models and custom data between multiple
|
167
|
+
Rails applications by publishing notifications via pubsub (Google PubSub, RabbitMQ,
|
168
|
+
or Apache Kafka) and automatically processed by all connected applications. Out
|
169
|
+
of the scope, this gem includes transactions to keep Data consistency by processing
|
170
|
+
notifications in the order they were delivered.
|
163
171
|
test_files: []
|