google-cloud-pubsub 1.4.0 → 1.7.1
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/CHANGELOG.md +43 -0
- data/EMULATOR.md +1 -1
- data/TROUBLESHOOTING.md +2 -8
- data/lib/google/cloud/pubsub/received_message.rb +0 -5
- data/lib/google/cloud/pubsub/retry_policy.rb +90 -0
- data/lib/google/cloud/pubsub/service.rb +9 -0
- data/lib/google/cloud/pubsub/subscriber.rb +29 -3
- data/lib/google/cloud/pubsub/subscriber/inventory.rb +6 -3
- data/lib/google/cloud/pubsub/subscriber/stream.rb +1 -0
- data/lib/google/cloud/pubsub/subscription.rb +84 -2
- data/lib/google/cloud/pubsub/subscription/push_config.rb +2 -2
- data/lib/google/cloud/pubsub/topic.rb +21 -1
- data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +65 -15
- data/lib/google/cloud/pubsub/v1/publisher_client.rb +151 -14
- data/lib/google/cloud/pubsub/v1/publisher_client_config.json +15 -0
- data/lib/google/cloud/pubsub/v1/subscriber_client.rb +84 -13
- data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +9 -0
- data/lib/google/cloud/pubsub/version.rb +1 -1
- data/lib/google/pubsub/v1/pubsub_pb.rb +14 -0
- data/lib/google/pubsub/v1/pubsub_services_pb.rb +6 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25d3602668077c7dee90a868dcc01353710ac3001ece8ebe92b7acc6c7bc1bb3
|
4
|
+
data.tar.gz: 2119781ea548d6e87d201bdb759643c7ac78b7ffab0a4ee7505f731c3c812670
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed1de151bbd790feb886162024dbe20e75825c7313de7f0349468d8adbdf0400ce0616f53925315a1a2558b2683fd9ac8b478b842b2008dae67990676c163a4b
|
7
|
+
data.tar.gz: 2247b98b5f04c936bd908c7a517d396e03af0f07030e7939282f750d8d2b9f569f428961c793f929d5595da60445a55948fe17864a1f25f1ab7d1746b06be9c0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,48 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 1.7.1 / 2020-05-28
|
4
|
+
|
5
|
+
#### Documentation
|
6
|
+
|
7
|
+
* Fix a few broken links
|
8
|
+
|
9
|
+
### 1.7.0 / 2020-05-21
|
10
|
+
|
11
|
+
#### Features
|
12
|
+
|
13
|
+
* Add Retry Policy support
|
14
|
+
* Add RetryPolicy
|
15
|
+
* Add retry_policy param to Topic#subscribe
|
16
|
+
* Add Subscription#retry_policy
|
17
|
+
* Add Subscription#retry_policy=
|
18
|
+
* Set client-scoped UUID in initial StreamingPullRequest#client_id
|
19
|
+
|
20
|
+
### 1.6.1 / 2020-05-06
|
21
|
+
|
22
|
+
#### Documentation
|
23
|
+
|
24
|
+
* Fix example in Emulator documentation
|
25
|
+
* Remove experimental notice from ReceivedMessage#delivery_attempt
|
26
|
+
* Wrap example URLs in backticks
|
27
|
+
|
28
|
+
### 1.6.0 / 2020-04-06
|
29
|
+
|
30
|
+
#### Features
|
31
|
+
|
32
|
+
* Add list_topic_snapshots and get_snapshot
|
33
|
+
* Add PublisherClient#list_topic_snapshots
|
34
|
+
* Add SubscriberClient#get_snapshot
|
35
|
+
|
36
|
+
#### Documentation
|
37
|
+
|
38
|
+
* Remove a spurious link in the low-level interface documentation.
|
39
|
+
|
40
|
+
### 1.5.0 / 2020-03-25
|
41
|
+
|
42
|
+
#### Features
|
43
|
+
|
44
|
+
* Add max_duration_per_lease_extension to Subscription#listen and Subscriber
|
45
|
+
|
3
46
|
### 1.4.0 / 2020-03-11
|
4
47
|
|
5
48
|
#### Features
|
data/EMULATOR.md
CHANGED
@@ -17,7 +17,7 @@ require "google/cloud/pubsub"
|
|
17
17
|
# Make Pub/Sub use the emulator
|
18
18
|
ENV["PUBSUB_EMULATOR_HOST"] = "localhost:8918"
|
19
19
|
|
20
|
-
pubsub = Google::Cloud::PubSub.new "emulator-project-id"
|
20
|
+
pubsub = Google::Cloud::PubSub.new project_id:"emulator-project-id"
|
21
21
|
|
22
22
|
# Get a topic in the current project
|
23
23
|
my_topic = pubsub.new_topic "my-topic"
|
data/TROUBLESHOOTING.md
CHANGED
@@ -24,14 +24,8 @@ improved, *please* create a new issue on GitHub so we can talk about it.
|
|
24
24
|
|
25
25
|
- [New issue][gh-ruby]
|
26
26
|
|
27
|
-
Or, you can ask questions on the [Google Cloud Platform Slack][slack-ruby]. You
|
28
|
-
can use the "ruby" channel for general Ruby questions, or use the
|
29
|
-
"google-cloud-ruby" channel if you have questions about this gem in particular.
|
30
|
-
|
31
27
|
[so-ruby]: http://stackoverflow.com/questions/tagged/google-cloud-platform+ruby+pubsub
|
32
28
|
|
33
|
-
[gh-search-ruby]: https://github.com/
|
34
|
-
|
35
|
-
[gh-ruby]: https://github.com/googlecloudplatform/google-cloud-ruby/issues/new
|
29
|
+
[gh-search-ruby]: https://github.com/googleapis/google-cloud-ruby/issues?q=label%3A%22api%3A+pubsub%22
|
36
30
|
|
37
|
-
[
|
31
|
+
[gh-ruby]: https://github.com/googleapis/google-cloud-ruby/issues/new
|
@@ -78,11 +78,6 @@ module Google
|
|
78
78
|
# The first delivery of a given message will have this value as `1`. The value is calculated at best effort and
|
79
79
|
# is approximate.
|
80
80
|
#
|
81
|
-
# EXPERIMENTAL: This feature is part of a closed alpha release and is available only to whitelisted partners.
|
82
|
-
# This method will return `nil` if a dead letter policy is not set on the subscription. This API might be
|
83
|
-
# changed in backward-incompatible ways and is not recommended for production use. It is not subject to any SLA
|
84
|
-
# or deprecation policy.
|
85
|
-
#
|
86
81
|
# @return [Integer, nil] A delivery attempt value of `1` or greater, or `nil` if a dead letter policy is not set
|
87
82
|
# on the subscription.
|
88
83
|
#
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# Copyright 2016 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
|
16
|
+
require "google/cloud/errors"
|
17
|
+
|
18
|
+
module Google
|
19
|
+
module Cloud
|
20
|
+
module PubSub
|
21
|
+
##
|
22
|
+
# # RetryPolicy
|
23
|
+
#
|
24
|
+
# An immutable Retry Policy value object that specifies how Cloud Pub/Sub retries message delivery.
|
25
|
+
#
|
26
|
+
# Retry delay will be exponential based on provided minimum and maximum backoffs. (See [Exponential
|
27
|
+
# backoff](https://en.wikipedia.org/wiki/Exponential_backoff).)
|
28
|
+
#
|
29
|
+
# Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events for a given message.
|
30
|
+
#
|
31
|
+
# Retry Policy is implemented on a best effort basis. At times, the delay between consecutive deliveries may not
|
32
|
+
# match the configuration. That is, delay can be more or less than configured backoff.
|
33
|
+
#
|
34
|
+
# **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for production
|
35
|
+
# use. It is not subject to any SLA or deprecation policy.
|
36
|
+
#
|
37
|
+
# @attr [Numeric] minimum_backoff The minimum delay between consecutive deliveries of a given message. Value
|
38
|
+
# should be between 0 and 600 seconds. The default value is 10 seconds.
|
39
|
+
# @attr [Numeric] maximum_backoff The maximum delay between consecutive deliveries of a given message. Value
|
40
|
+
# should be between 0 and 600 seconds. The default value is 600 seconds.
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# require "google/cloud/pubsub"
|
44
|
+
#
|
45
|
+
# pubsub = Google::Cloud::PubSub.new
|
46
|
+
#
|
47
|
+
# sub = pubsub.subscription "my-topic-sub"
|
48
|
+
#
|
49
|
+
# sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
|
50
|
+
#
|
51
|
+
# sub.retry_policy.minimum_backoff #=> 5
|
52
|
+
# sub.retry_policy.maximum_backoff #=> 300
|
53
|
+
#
|
54
|
+
class RetryPolicy
|
55
|
+
attr_reader :minimum_backoff, :maximum_backoff
|
56
|
+
|
57
|
+
##
|
58
|
+
# Creates a new, immutable RetryPolicy value object.
|
59
|
+
#
|
60
|
+
# @attr [Numeric, nil] minimum_backoff The minimum delay between consecutive deliveries of a given message.
|
61
|
+
# Value should be between 0 and 600 seconds. If `nil` is provided, the default value is 10 seconds.
|
62
|
+
# @attr [Numeric, nil] maximum_backoff The maximum delay between consecutive deliveries of a given message.
|
63
|
+
# Value should be between 0 and 600 seconds. If `nil` is provided, the default value is 600 seconds.
|
64
|
+
#
|
65
|
+
def initialize minimum_backoff: nil, maximum_backoff: nil
|
66
|
+
@minimum_backoff = minimum_backoff
|
67
|
+
@maximum_backoff = maximum_backoff
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# @private Convert the RetryPolicy to a Google::Cloud::PubSub::V1::RetryPolicy object.
|
72
|
+
def to_grpc
|
73
|
+
Google::Cloud::PubSub::V1::RetryPolicy.new(
|
74
|
+
minimum_backoff: Convert.number_to_duration(minimum_backoff),
|
75
|
+
maximum_backoff: Convert.number_to_duration(maximum_backoff)
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# @private New RetryPolicy from a Google::Cloud::PubSub::V1::RetryPolicy object.
|
81
|
+
def self.from_grpc grpc
|
82
|
+
new(
|
83
|
+
minimum_backoff: Convert.duration_to_number(grpc.minimum_backoff),
|
84
|
+
maximum_backoff: Convert.duration_to_number(grpc.maximum_backoff)
|
85
|
+
)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -19,6 +19,7 @@ require "google/cloud/pubsub/convert"
|
|
19
19
|
require "google/cloud/pubsub/version"
|
20
20
|
require "google/cloud/pubsub/v1"
|
21
21
|
require "google/gax/errors"
|
22
|
+
require "securerandom"
|
22
23
|
|
23
24
|
module Google
|
24
25
|
module Cloud
|
@@ -28,6 +29,12 @@ module Google
|
|
28
29
|
# methods.
|
29
30
|
class Service
|
30
31
|
attr_accessor :project, :credentials, :host, :timeout, :client_config
|
32
|
+
###
|
33
|
+
# The same client_id is used across all streaming pull connections that are created by this client. This is
|
34
|
+
# intentional, as it indicates to the server that any guarantees, such as message ordering, made for a stream
|
35
|
+
# that is disconnected will be made for the stream that is created to replace it. The attr_accessor allows the
|
36
|
+
# value to be replaced for unit testing.
|
37
|
+
attr_accessor :client_id
|
31
38
|
|
32
39
|
##
|
33
40
|
# Creates a new Service instance.
|
@@ -38,6 +45,7 @@ module Google
|
|
38
45
|
@host = host || V1::PublisherClient::SERVICE_ADDRESS
|
39
46
|
@timeout = timeout
|
40
47
|
@client_config = client_config || {}
|
48
|
+
@client_id = SecureRandom.uuid.freeze
|
41
49
|
end
|
42
50
|
|
43
51
|
def channel
|
@@ -248,6 +256,7 @@ module Google
|
|
248
256
|
labels: labels,
|
249
257
|
enable_message_ordering: message_ordering,
|
250
258
|
dead_letter_policy: dead_letter_policy(options),
|
259
|
+
retry_policy: options[:retry_policy],
|
251
260
|
options: default_options
|
252
261
|
end
|
253
262
|
end
|
@@ -104,6 +104,7 @@ module Google
|
|
104
104
|
# received messages.
|
105
105
|
#
|
106
106
|
# @return [Subscriber] returns self so calls can be chained.
|
107
|
+
#
|
107
108
|
def start
|
108
109
|
start_pool = synchronize do
|
109
110
|
@started = true
|
@@ -129,6 +130,7 @@ module Google
|
|
129
130
|
# received messages have been processed or released.
|
130
131
|
#
|
131
132
|
# @return [Subscriber] returns self so calls can be chained.
|
133
|
+
#
|
132
134
|
def stop
|
133
135
|
stop_pool = synchronize do
|
134
136
|
@started = false
|
@@ -158,6 +160,7 @@ module Google
|
|
158
160
|
# subscriber is fully stopped. Default will block indefinitely.
|
159
161
|
#
|
160
162
|
# @return [Subscriber] returns self so calls can be chained.
|
163
|
+
#
|
161
164
|
def wait! timeout = nil
|
162
165
|
wait_pool = synchronize do
|
163
166
|
@stream_pool.map do |stream|
|
@@ -190,6 +193,7 @@ module Google
|
|
190
193
|
# Whether the subscriber has been started.
|
191
194
|
#
|
192
195
|
# @return [boolean] `true` when started, `false` otherwise.
|
196
|
+
#
|
193
197
|
def started?
|
194
198
|
synchronize { @started }
|
195
199
|
end
|
@@ -198,6 +202,7 @@ module Google
|
|
198
202
|
# Whether the subscriber has been stopped.
|
199
203
|
#
|
200
204
|
# @return [boolean] `true` when stopped, `false` otherwise.
|
205
|
+
#
|
201
206
|
def stopped?
|
202
207
|
synchronize { @stopped }
|
203
208
|
end
|
@@ -279,6 +284,9 @@ module Google
|
|
279
284
|
|
280
285
|
##
|
281
286
|
# The number of received messages to be collected by subscriber. Default is 1,000.
|
287
|
+
#
|
288
|
+
# @return [Integer] The maximum number of messages.
|
289
|
+
#
|
282
290
|
def max_outstanding_messages
|
283
291
|
@inventory[:max_outstanding_messages]
|
284
292
|
end
|
@@ -289,6 +297,9 @@ module Google
|
|
289
297
|
|
290
298
|
##
|
291
299
|
# The total byte size of received messages to be collected by subscriber. Default is 100,000,000 (100MB).
|
300
|
+
#
|
301
|
+
# @return [Integer] The maximum number of bytes.
|
302
|
+
#
|
292
303
|
def max_outstanding_bytes
|
293
304
|
@inventory[:max_outstanding_bytes]
|
294
305
|
end
|
@@ -297,19 +308,33 @@ module Google
|
|
297
308
|
|
298
309
|
##
|
299
310
|
# The number of seconds that received messages can be held awaiting processing. Default is 3,600 (1 hour).
|
311
|
+
#
|
312
|
+
# @return [Integer] The maximum number of seconds.
|
313
|
+
#
|
300
314
|
def max_total_lease_duration
|
301
315
|
@inventory[:max_total_lease_duration]
|
302
316
|
end
|
303
317
|
# @deprecated Use {#max_total_lease_duration}.
|
304
318
|
alias inventory_extension max_total_lease_duration
|
305
319
|
|
320
|
+
##
|
321
|
+
# The maximum amount of time in seconds for a single lease extension attempt. Bounds the delay before a message
|
322
|
+
# redelivery if the subscriber fails to extend the deadline. Default is 0 (disabled).
|
323
|
+
#
|
324
|
+
# @return [Integer] The maximum number of seconds.
|
325
|
+
#
|
326
|
+
def max_duration_per_lease_extension
|
327
|
+
@inventory[:max_duration_per_lease_extension]
|
328
|
+
end
|
329
|
+
|
306
330
|
##
|
307
331
|
# @private
|
308
332
|
def stream_inventory
|
309
333
|
{
|
310
|
-
limit:
|
311
|
-
bytesize:
|
312
|
-
extension:
|
334
|
+
limit: @inventory[:max_outstanding_messages].fdiv(@streams).ceil,
|
335
|
+
bytesize: @inventory[:max_outstanding_bytes].fdiv(@streams).ceil,
|
336
|
+
extension: @inventory[:max_total_lease_duration],
|
337
|
+
max_duration_per_lease_extension: @inventory[:max_duration_per_lease_extension]
|
313
338
|
}
|
314
339
|
end
|
315
340
|
|
@@ -351,6 +376,7 @@ module Google
|
|
351
376
|
@inventory[:max_outstanding_messages] = Integer(@inventory[:max_outstanding_messages] || 1000)
|
352
377
|
@inventory[:max_outstanding_bytes] = Integer(@inventory[:max_outstanding_bytes] || 100_000_000)
|
353
378
|
@inventory[:max_total_lease_duration] = Integer(@inventory[:max_total_lease_duration] || 3600)
|
379
|
+
@inventory[:max_duration_per_lease_extension] = Integer(@inventory[:max_duration_per_lease_extension] || 0)
|
354
380
|
end
|
355
381
|
|
356
382
|
def default_error_callbacks
|
@@ -30,14 +30,15 @@ module Google
|
|
30
30
|
|
31
31
|
include MonitorMixin
|
32
32
|
|
33
|
-
attr_reader :stream, :limit, :bytesize, :extension
|
33
|
+
attr_reader :stream, :limit, :bytesize, :extension, :max_duration_per_lease_extension
|
34
34
|
|
35
|
-
def initialize stream, limit:, bytesize:, extension:
|
35
|
+
def initialize stream, limit:, bytesize:, extension:, max_duration_per_lease_extension:
|
36
36
|
super()
|
37
37
|
@stream = stream
|
38
38
|
@limit = limit
|
39
39
|
@bytesize = bytesize
|
40
40
|
@extension = extension
|
41
|
+
@max_duration_per_lease_extension = max_duration_per_lease_extension
|
41
42
|
@inventory = {}
|
42
43
|
@wait_cond = new_cond
|
43
44
|
end
|
@@ -152,7 +153,9 @@ module Google
|
|
152
153
|
end
|
153
154
|
|
154
155
|
def calc_delay
|
155
|
-
(stream.subscriber.deadline - 3) * rand(0.8..0.9)
|
156
|
+
delay = (stream.subscriber.deadline - 3) * rand(0.8..0.9)
|
157
|
+
delay = [delay, max_duration_per_lease_extension].min if max_duration_per_lease_extension.positive?
|
158
|
+
delay
|
156
159
|
end
|
157
160
|
end
|
158
161
|
end
|
@@ -363,6 +363,7 @@ module Google
|
|
363
363
|
req.stream_ack_deadline_seconds = @subscriber.deadline
|
364
364
|
req.modify_deadline_ack_ids += @inventory.ack_ids
|
365
365
|
req.modify_deadline_seconds += @inventory.ack_ids.map { @subscriber.deadline }
|
366
|
+
req.client_id = @subscriber.service.client_id
|
366
367
|
end
|
367
368
|
end
|
368
369
|
|
@@ -18,6 +18,7 @@ require "google/cloud/errors"
|
|
18
18
|
require "google/cloud/pubsub/subscription/list"
|
19
19
|
require "google/cloud/pubsub/subscription/push_config"
|
20
20
|
require "google/cloud/pubsub/received_message"
|
21
|
+
require "google/cloud/pubsub/retry_policy"
|
21
22
|
require "google/cloud/pubsub/snapshot"
|
22
23
|
require "google/cloud/pubsub/subscriber"
|
23
24
|
require "google/cloud/pubsub/v1"
|
@@ -188,7 +189,7 @@ module Google
|
|
188
189
|
##
|
189
190
|
# Returns the URL locating the endpoint to which messages should be
|
190
191
|
# pushed. For example, a Webhook endpoint might use
|
191
|
-
#
|
192
|
+
# `https://example.com/push`.
|
192
193
|
#
|
193
194
|
# Makes an API call to retrieve the endpoint value when called on a
|
194
195
|
# reference object. See {#reference?}.
|
@@ -202,7 +203,7 @@ module Google
|
|
202
203
|
|
203
204
|
##
|
204
205
|
# Sets the URL locating the endpoint to which messages should be pushed.
|
205
|
-
# For example, a Webhook endpoint might use
|
206
|
+
# For example, a Webhook endpoint might use `https://example.com/push`.
|
206
207
|
#
|
207
208
|
# @param [String] new_endpoint The new endpoint value.
|
208
209
|
#
|
@@ -483,6 +484,65 @@ module Google
|
|
483
484
|
@resource_name = nil
|
484
485
|
end
|
485
486
|
|
487
|
+
##
|
488
|
+
# A policy that specifies how Cloud Pub/Sub retries message delivery for this subscription. If `nil`, the
|
489
|
+
# default retry policy is applied. This generally implies that messages will be retried as soon as possible
|
490
|
+
# for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
|
491
|
+
# for a given message.
|
492
|
+
#
|
493
|
+
# **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
|
494
|
+
# production use. It is not subject to any SLA or deprecation policy.
|
495
|
+
#
|
496
|
+
# @return [RetryPolicy, nil] The retry policy for the subscription, or `nil`.
|
497
|
+
#
|
498
|
+
# @example
|
499
|
+
# require "google/cloud/pubsub"
|
500
|
+
#
|
501
|
+
# pubsub = Google::Cloud::PubSub.new
|
502
|
+
#
|
503
|
+
# sub = pubsub.subscription "my-topic-sub"
|
504
|
+
#
|
505
|
+
# sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
|
506
|
+
#
|
507
|
+
# sub.retry_policy.minimum_backoff #=> 5
|
508
|
+
# sub.retry_policy.maximum_backoff #=> 300
|
509
|
+
#
|
510
|
+
def retry_policy
|
511
|
+
ensure_grpc!
|
512
|
+
return nil unless @grpc.retry_policy
|
513
|
+
RetryPolicy.from_grpc @grpc.retry_policy
|
514
|
+
end
|
515
|
+
|
516
|
+
##
|
517
|
+
# Sets a policy that specifies how Cloud Pub/Sub retries message delivery for this subscription. If `nil`, the
|
518
|
+
# default retry policy is applied. This generally implies that messages will be retried as soon as possible
|
519
|
+
# for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
|
520
|
+
# for a given message.
|
521
|
+
#
|
522
|
+
# **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
|
523
|
+
# production use. It is not subject to any SLA or deprecation policy.
|
524
|
+
#
|
525
|
+
# @param [RetryPolicy, nil] new_retry_policy A new retry policy for the subscription, or `nil`.
|
526
|
+
#
|
527
|
+
# @example
|
528
|
+
# require "google/cloud/pubsub"
|
529
|
+
#
|
530
|
+
# pubsub = Google::Cloud::PubSub.new
|
531
|
+
#
|
532
|
+
# sub = pubsub.subscription "my-topic-sub"
|
533
|
+
#
|
534
|
+
# sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
|
535
|
+
#
|
536
|
+
# sub.retry_policy.minimum_backoff #=> 5
|
537
|
+
# sub.retry_policy.maximum_backoff #=> 300
|
538
|
+
#
|
539
|
+
def retry_policy= new_retry_policy
|
540
|
+
ensure_grpc!
|
541
|
+
new_retry_policy = new_retry_policy.to_grpc if new_retry_policy
|
542
|
+
update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, retry_policy: new_retry_policy
|
543
|
+
@grpc = service.update_subscription update_grpc, :retry_policy
|
544
|
+
end
|
545
|
+
|
486
546
|
##
|
487
547
|
# Whether message ordering has been enabled. When enabled, messages
|
488
548
|
# published with the same `ordering_key` will be delivered in the order
|
@@ -699,6 +759,9 @@ module Google
|
|
699
759
|
# subscriber. Default is 100,000,000 (100MB). (Note: replaces `:bytesize`, which is deprecated.)
|
700
760
|
# * `:max_total_lease_duration` [Integer] The number of seconds that received messages can be held awaiting
|
701
761
|
# processing. Default is 3,600 (1 hour). (Note: replaces `:extension`, which is deprecated.)
|
762
|
+
# * `:max_duration_per_lease_extension` [Integer] The maximum amount of time in seconds for a single lease
|
763
|
+
# extension attempt. Bounds the delay before a message redelivery if the subscriber fails to extend the
|
764
|
+
# deadline. Default is 0 (disabled).
|
702
765
|
# @param [Hash] threads The number of threads to create to handle
|
703
766
|
# concurrent calls by each stream opened by the subscriber. Optional.
|
704
767
|
#
|
@@ -774,6 +837,25 @@ module Google
|
|
774
837
|
# # Shut down the subscriber when ready to stop receiving messages.
|
775
838
|
# subscriber.stop.wait!
|
776
839
|
#
|
840
|
+
# @example Set the maximum amount of time before redelivery if the subscriber fails to extend the deadline:
|
841
|
+
# require "google/cloud/pubsub"
|
842
|
+
#
|
843
|
+
# pubsub = Google::Cloud::PubSub.new
|
844
|
+
#
|
845
|
+
# sub = pubsub.subscription "my-topic-sub"
|
846
|
+
#
|
847
|
+
# subscriber = sub.listen inventory: { max_duration_per_lease_extension: 20 } do |received_message|
|
848
|
+
# # Process message very slowly with possibility of failure.
|
849
|
+
# process rec_message.data # takes minutes
|
850
|
+
# rec_message.acknowledge!
|
851
|
+
# end
|
852
|
+
#
|
853
|
+
# # Start background threads that will call block passed to listen.
|
854
|
+
# subscriber.start
|
855
|
+
#
|
856
|
+
# # Shut down the subscriber when ready to stop receiving messages.
|
857
|
+
# subscriber.stop.wait!
|
858
|
+
#
|
777
859
|
def listen deadline: nil, message_ordering: nil, streams: nil, inventory: nil, threads: {}, &block
|
778
860
|
ensure_service!
|
779
861
|
deadline ||= self.deadline
|