pub_sub_model_sync 0.5.7.1 → 0.5.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +45 -39
- data/README.md +4 -3
- data/lib/pub_sub_model_sync/mock_google_service.rb +8 -0
- data/lib/pub_sub_model_sync/service_google.rb +10 -2
- data/lib/pub_sub_model_sync/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14095a129de1a44dd2f51051e3ee768217eae9ddbaa69b2e9bb3979d857dde5a
|
4
|
+
data.tar.gz: eeff964335f21b2bc5db23048cf0a09cb8e4d385333f72cf431d9201e107737b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f85d85ac9f5de88af18848c8511e113a2359c5135b4dba8904e4bbc2b1f72b7be526c9fcdd221761202e9ef8d4630d84e08e9a5d8aa0c2753f98046a514fb70
|
7
|
+
data.tar.gz: 4788d133e2eaf6b302d34898d5f0d7002556edb357c907f280df137d686c71d7280503a763180f7fb61dece830c41f1263a7d569a868fad0082d13062e7caccd
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pub_sub_model_sync (0.5.
|
4
|
+
pub_sub_model_sync (0.5.8)
|
5
5
|
rails
|
6
6
|
|
7
7
|
GEM
|
@@ -78,49 +78,55 @@ GEM
|
|
78
78
|
diff-lcs (1.3)
|
79
79
|
digest-crc (0.5.1)
|
80
80
|
erubi (1.10.0)
|
81
|
-
faraday (
|
81
|
+
faraday (1.1.0)
|
82
82
|
multipart-post (>= 1.2, < 3)
|
83
|
+
ruby2_keywords
|
84
|
+
gapic-common (0.3.4)
|
85
|
+
google-protobuf (~> 3.12, >= 3.12.2)
|
86
|
+
googleapis-common-protos (>= 1.3.9, < 2.0)
|
87
|
+
googleapis-common-protos-types (>= 1.0.4, < 2.0)
|
88
|
+
googleauth (~> 0.9)
|
89
|
+
grpc (~> 1.25)
|
83
90
|
globalid (0.4.2)
|
84
91
|
activesupport (>= 4.2.0)
|
85
|
-
google-cloud-core (1.
|
92
|
+
google-cloud-core (1.5.0)
|
86
93
|
google-cloud-env (~> 1.0)
|
87
|
-
|
88
|
-
|
89
|
-
|
94
|
+
google-cloud-errors (~> 1.0)
|
95
|
+
google-cloud-env (1.4.0)
|
96
|
+
faraday (>= 0.17.3, < 2.0)
|
97
|
+
google-cloud-errors (1.0.1)
|
98
|
+
google-cloud-pubsub (2.3.0)
|
90
99
|
concurrent-ruby (~> 1.1)
|
91
|
-
google-cloud-core (~> 1.
|
92
|
-
google-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
google-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
googleapis-common-protos (1.
|
103
|
-
google-protobuf (~> 3.
|
104
|
-
|
105
|
-
|
106
|
-
googleapis-common-protos-types (1.0.4)
|
107
|
-
google-protobuf (~> 3.0)
|
108
|
-
googleauth (0.9.0)
|
109
|
-
faraday (~> 0.12)
|
100
|
+
google-cloud-core (~> 1.5)
|
101
|
+
google-cloud-pubsub-v1 (~> 0.0)
|
102
|
+
google-cloud-pubsub-v1 (0.1.2)
|
103
|
+
gapic-common (~> 0.3)
|
104
|
+
google-cloud-errors (~> 1.0)
|
105
|
+
grpc-google-iam-v1 (>= 0.6.10, < 2.0)
|
106
|
+
google-protobuf (3.14.0-universal-darwin)
|
107
|
+
googleapis-common-protos (1.3.10)
|
108
|
+
google-protobuf (~> 3.11)
|
109
|
+
googleapis-common-protos-types (>= 1.0.5, < 2.0)
|
110
|
+
grpc (~> 1.27)
|
111
|
+
googleapis-common-protos-types (1.0.5)
|
112
|
+
google-protobuf (~> 3.11)
|
113
|
+
googleauth (0.14.0)
|
114
|
+
faraday (>= 0.17.3, < 2.0)
|
110
115
|
jwt (>= 1.4, < 3.0)
|
111
116
|
memoist (~> 0.16)
|
112
117
|
multi_json (~> 1.11)
|
113
118
|
os (>= 0.9, < 2.0)
|
114
|
-
signet (~> 0.
|
115
|
-
grpc (1.
|
116
|
-
google-protobuf (~> 3.
|
119
|
+
signet (~> 0.14)
|
120
|
+
grpc (1.34.0-universal-darwin)
|
121
|
+
google-protobuf (~> 3.13)
|
117
122
|
googleapis-common-protos-types (~> 1.0)
|
118
|
-
grpc-google-iam-v1 (0.6.
|
119
|
-
|
120
|
-
|
123
|
+
grpc-google-iam-v1 (0.6.10)
|
124
|
+
google-protobuf (~> 3.11)
|
125
|
+
googleapis-common-protos (>= 1.3.10, < 2.0)
|
126
|
+
grpc (~> 1.27)
|
121
127
|
i18n (1.8.2)
|
122
128
|
concurrent-ruby (~> 1.0)
|
123
|
-
jwt (2.2.
|
129
|
+
jwt (2.2.2)
|
124
130
|
loofah (2.8.0)
|
125
131
|
crass (~> 1.0.2)
|
126
132
|
nokogiri (>= 1.5.9)
|
@@ -134,16 +140,16 @@ GEM
|
|
134
140
|
mini_mime (1.0.2)
|
135
141
|
mini_portile2 (2.4.0)
|
136
142
|
minitest (5.14.0)
|
137
|
-
multi_json (1.
|
143
|
+
multi_json (1.15.0)
|
138
144
|
multipart-post (2.1.1)
|
139
145
|
nio4r (2.5.4)
|
140
146
|
nokogiri (1.10.10)
|
141
147
|
mini_portile2 (~> 2.4.0)
|
142
|
-
os (1.
|
148
|
+
os (1.1.1)
|
143
149
|
parallel (1.20.1)
|
144
150
|
parser (2.7.2.0)
|
145
151
|
ast (~> 2.4.1)
|
146
|
-
public_suffix (4.0.
|
152
|
+
public_suffix (4.0.6)
|
147
153
|
rack (2.2.3)
|
148
154
|
rack-test (1.1.0)
|
149
155
|
rack (>= 1.0, < 3)
|
@@ -177,7 +183,6 @@ GEM
|
|
177
183
|
rake (13.0.1)
|
178
184
|
regexp_parser (2.0.1)
|
179
185
|
rexml (3.2.4)
|
180
|
-
rly (0.2.3)
|
181
186
|
rspec (3.9.0)
|
182
187
|
rspec-core (~> 3.9.0)
|
183
188
|
rspec-expectations (~> 3.9.0)
|
@@ -205,9 +210,10 @@ GEM
|
|
205
210
|
ruby-kafka (1.0.0)
|
206
211
|
digest-crc
|
207
212
|
ruby-progressbar (1.10.1)
|
208
|
-
|
213
|
+
ruby2_keywords (0.0.2)
|
214
|
+
signet (0.14.0)
|
209
215
|
addressable (~> 2.3)
|
210
|
-
faraday (
|
216
|
+
faraday (>= 0.17.3, < 2.0)
|
211
217
|
jwt (>= 1.5, < 3.0)
|
212
218
|
multi_json (~> 1.10)
|
213
219
|
sprockets (4.0.2)
|
@@ -235,7 +241,7 @@ DEPENDENCIES
|
|
235
241
|
bundler
|
236
242
|
bunny
|
237
243
|
database_cleaner-active_record
|
238
|
-
google-cloud-pubsub
|
244
|
+
google-cloud-pubsub (> 2.0)
|
239
245
|
pub_sub_model_sync!
|
240
246
|
rake
|
241
247
|
rspec
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Add this line to your application's Gemfile:
|
|
15
15
|
```ruby
|
16
16
|
gem 'pub_sub_model_sync'
|
17
17
|
|
18
|
-
gem 'google-cloud-pubsub' # to use google pub/sub service
|
18
|
+
gem 'google-cloud-pubsub', '>= 1.9' # to use google pub/sub service
|
19
19
|
gem 'bunny' # to use rabbit-mq pub/sub service
|
20
20
|
gem 'ruby-kafka' # to use apache kafka pub/sub service
|
21
21
|
```
|
@@ -308,10 +308,11 @@ config.debug = true
|
|
308
308
|
|
309
309
|
## TODO
|
310
310
|
- Add alias attributes when subscribing (similar to publisher)
|
311
|
-
- Add flag ```model.
|
311
|
+
- Add flag ```model.ps_process_payload``` to retrieve the payload used to process the pub/sub sync
|
312
312
|
- Auto publish update only if payload has changed
|
313
313
|
- On delete, payload must only be composed by ids
|
314
|
-
-
|
314
|
+
- Feature to publish multiple message at a time with the ability to exclude similar messages by klass and action (use the last one)
|
315
|
+
PubSubModelSync::MessagePublisher.batch_publish({ same_keys: :use_last_as_first|:use_last|:use_first_as_last|:keep*, same_data: :use_last_as_first*|:use_last|:use_first_as_last|:keep })
|
315
316
|
|
316
317
|
## Q&A
|
317
318
|
- Error "could not obtain a connection from the pool within 5.000 seconds"
|
@@ -8,6 +8,7 @@ end
|
|
8
8
|
module PubSubModelSync
|
9
9
|
class ServiceGoogle < ServiceBase
|
10
10
|
LISTEN_SETTINGS = { threads: { callback: 1 } }.freeze
|
11
|
+
TOPIC_SETTINGS = { async: { threads: { publish: 1, callback: 1 } } }.freeze
|
11
12
|
SUBSCRIPTION_SETTINGS = { message_ordering: true }.freeze
|
12
13
|
attr_accessor :service, :topic, :subscription, :subscriber
|
13
14
|
|
@@ -15,7 +16,8 @@ module PubSubModelSync
|
|
15
16
|
@service = Google::Cloud::Pubsub.new(project: config.project,
|
16
17
|
credentials: config.credentials)
|
17
18
|
@topic = service.topic(config.topic_name) ||
|
18
|
-
service.create_topic(config.topic_name)
|
19
|
+
service.create_topic(config.topic_name, TOPIC_SETTINGS)
|
20
|
+
topic.enable_message_ordering!
|
19
21
|
end
|
20
22
|
|
21
23
|
def listen_messages
|
@@ -30,7 +32,9 @@ module PubSubModelSync
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def publish(payload)
|
33
|
-
topic.
|
35
|
+
topic.publish_async(payload.to_json, message_headers) do |res|
|
36
|
+
raise 'Failed to publish the message.' unless res.succeeded?
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
40
|
def stop
|
@@ -40,6 +44,10 @@ module PubSubModelSync
|
|
40
44
|
|
41
45
|
private
|
42
46
|
|
47
|
+
def message_headers
|
48
|
+
{ SERVICE_KEY => true, ordering_key: Time.current.to_i }.merge(PUBLISH_SETTINGS)
|
49
|
+
end
|
50
|
+
|
43
51
|
def subscribe_to_topic
|
44
52
|
topic.subscription(config.subscription_key) ||
|
45
53
|
topic.subscribe(config.subscription_key, SUBSCRIPTION_SETTINGS)
|
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: 0.5.
|
4
|
+
version: 0.5.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|