google-cloud-pubsub 1.2.2 → 1.3.0
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 +10 -0
- data/lib/google/cloud/pubsub/received_message.rb +43 -0
- data/lib/google/cloud/pubsub/service.rb +10 -1
- data/lib/google/cloud/pubsub/subscription.rb +132 -0
- data/lib/google/cloud/pubsub/topic.rb +41 -2
- data/lib/google/cloud/pubsub/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: f176e0d099e688edae5273450671e309a2ddd9a34ff6845a29dcbe972e452aba
|
4
|
+
data.tar.gz: 47cf3c8e40d728c48c306646381e0d3024bd95f8986675aae285c929a7ebffb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5df91b44a3f0bcb2ec096fa49b6bac50b04af7e8cb4e6896a1d4be456663f5f009690ff37b875664e04c55a55bb84acb06c55c2dfacec290672746da071e93be
|
7
|
+
data.tar.gz: 363d70b5b69b06169afc5256d83c8f8f62b2fea532bd612d37ded55114f0f421bd978f13cf5329be3ca481bd059f853143705d9aa2ca00cf27cba032b63135f2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 1.3.0 / 2020-02-10
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* Add support for Dead Letter Topics
|
8
|
+
* Add `dead_letter_topic` and `dead_letter_max_delivery_attempts` to `Topic#subscribe`
|
9
|
+
* Add `Subscription#dead_letter_topic` and `Subscription#dead_letter_topic=`
|
10
|
+
* Add `Subscription#dead_letter_max_delivery_attempts` and `Subscription#dead_letter_max_delivery_attempts=`
|
11
|
+
* Add `ReceivedMessage#delivery_attempt`
|
12
|
+
|
3
13
|
### 1.2.2 / 2020-02-04
|
4
14
|
|
5
15
|
#### Performance Improvements
|
@@ -63,6 +63,49 @@ module Google
|
|
63
63
|
@grpc.ack_id
|
64
64
|
end
|
65
65
|
|
66
|
+
##
|
67
|
+
# Returns the delivery attempt counter for the message. If a dead letter policy is not set on the subscription,
|
68
|
+
# this will be `nil`. See {Topic#subscribe}, {Subscription#dead_letter_topic=} and
|
69
|
+
# {Subscription#dead_letter_max_delivery_attempts=}.
|
70
|
+
#
|
71
|
+
# The delivery attempt counter is `1 + (the sum of number of NACKs and number of ack_deadline exceeds)` for the
|
72
|
+
# message.
|
73
|
+
#
|
74
|
+
# A NACK is any call to `ModifyAckDeadline` with a `0` deadline. An `ack_deadline` exceeds event is whenever a
|
75
|
+
# message is not acknowledged within `ack_deadline`. Note that `ack_deadline` is initially
|
76
|
+
# `Subscription.ackDeadlineSeconds`, but may get extended automatically by the client library.
|
77
|
+
#
|
78
|
+
# The first delivery of a given message will have this value as `1`. The value is calculated at best effort and
|
79
|
+
# is approximate.
|
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
|
+
# @return [Integer, nil] A delivery attempt value of `1` or greater, or `nil` if a dead letter policy is not set
|
87
|
+
# on the subscription.
|
88
|
+
#
|
89
|
+
# @example
|
90
|
+
# require "google/cloud/pubsub"
|
91
|
+
#
|
92
|
+
# pubsub = Google::Cloud::PubSub.new
|
93
|
+
#
|
94
|
+
# topic = pubsub.topic "my-topic"
|
95
|
+
# dead_letter_topic = pubsub.topic "my-dead-letter-topic", skip_lookup: true
|
96
|
+
# sub = topic.subscribe "my-topic-sub",
|
97
|
+
# dead_letter_topic: dead_letter_topic,
|
98
|
+
# dead_letter_max_delivery_attempts: 10
|
99
|
+
#
|
100
|
+
# subscriber = sub.listen do |received_message|
|
101
|
+
# puts received_message.message.delivery_attempt
|
102
|
+
# end
|
103
|
+
#
|
104
|
+
def delivery_attempt
|
105
|
+
return nil if @grpc.delivery_attempt && @grpc.delivery_attempt < 1
|
106
|
+
@grpc.delivery_attempt
|
107
|
+
end
|
108
|
+
|
66
109
|
##
|
67
110
|
# The received message.
|
68
111
|
def message
|
@@ -238,7 +238,6 @@ module Google
|
|
238
238
|
mrd = Convert.number_to_duration options[:retention]
|
239
239
|
labels = options[:labels]
|
240
240
|
message_ordering = options[:message_ordering]
|
241
|
-
|
242
241
|
execute do
|
243
242
|
subscriber.create_subscription \
|
244
243
|
name, topic,
|
@@ -248,6 +247,7 @@ module Google
|
|
248
247
|
message_retention_duration: mrd,
|
249
248
|
labels: labels,
|
250
249
|
enable_message_ordering: message_ordering,
|
250
|
+
dead_letter_policy: dead_letter_policy(options),
|
251
251
|
options: default_options
|
252
252
|
end
|
253
253
|
end
|
@@ -477,6 +477,15 @@ module Google
|
|
477
477
|
true
|
478
478
|
end
|
479
479
|
|
480
|
+
def dead_letter_policy options
|
481
|
+
return nil unless options[:dead_letter_topic_name]
|
482
|
+
policy = Google::Cloud::PubSub::V1::DeadLetterPolicy.new dead_letter_topic: options[:dead_letter_topic_name]
|
483
|
+
if options[:dead_letter_max_delivery_attempts]
|
484
|
+
policy.max_delivery_attempts = options[:dead_letter_max_delivery_attempts]
|
485
|
+
end
|
486
|
+
policy
|
487
|
+
end
|
488
|
+
|
480
489
|
def default_headers
|
481
490
|
{ "google-cloud-resource-prefix" => "projects/#{@project}" }
|
482
491
|
end
|
@@ -20,6 +20,7 @@ require "google/cloud/pubsub/subscription/push_config"
|
|
20
20
|
require "google/cloud/pubsub/received_message"
|
21
21
|
require "google/cloud/pubsub/snapshot"
|
22
22
|
require "google/cloud/pubsub/subscriber"
|
23
|
+
require "google/cloud/pubsub/v1"
|
23
24
|
|
24
25
|
module Google
|
25
26
|
module Cloud
|
@@ -351,6 +352,137 @@ module Google
|
|
351
352
|
@resource_name = nil
|
352
353
|
end
|
353
354
|
|
355
|
+
##
|
356
|
+
# Returns the {Topic} to which dead letter messages should be published if a dead letter policy is configured,
|
357
|
+
# otherwise `nil`. Dead lettering is done on a best effort basis. The same message might be dead lettered
|
358
|
+
# multiple times.
|
359
|
+
#
|
360
|
+
# See also {#dead_letter_topic=}, {#dead_letter_max_delivery_attempts=} and
|
361
|
+
# {#dead_letter_max_delivery_attempts}.
|
362
|
+
#
|
363
|
+
# Makes an API call to retrieve the topic name when called on a reference object. See {#reference?}.
|
364
|
+
#
|
365
|
+
# @return [Topic, nil]
|
366
|
+
#
|
367
|
+
# @example
|
368
|
+
# require "google/cloud/pubsub"
|
369
|
+
#
|
370
|
+
# pubsub = Google::Cloud::PubSub.new
|
371
|
+
#
|
372
|
+
# sub = pubsub.subscription "my-topic-sub"
|
373
|
+
# sub.dead_letter_topic.name #=> "projects/my-project/topics/my-dead-letter-topic"
|
374
|
+
# sub.dead_letter_max_delivery_attempts #=> 10
|
375
|
+
#
|
376
|
+
def dead_letter_topic
|
377
|
+
ensure_grpc!
|
378
|
+
return nil unless @grpc.dead_letter_policy
|
379
|
+
Topic.from_name @grpc.dead_letter_policy.dead_letter_topic, service
|
380
|
+
end
|
381
|
+
|
382
|
+
##
|
383
|
+
# Sets the {Topic} to which dead letter messages for the subscription should be published. Dead lettering is
|
384
|
+
# done on a best effort basis. The same message might be dead lettered multiple times.
|
385
|
+
# The Cloud Pub/Sub service account associated with the enclosing subscription's parent project (i.e.,
|
386
|
+
# `service-\\{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com`) must have permission to Publish() to this
|
387
|
+
# topic.
|
388
|
+
#
|
389
|
+
# The operation will fail if the topic does not exist. Users should ensure that there is a subscription attached
|
390
|
+
# to this topic since messages published to a topic with no subscriptions are lost.
|
391
|
+
#
|
392
|
+
# See also {#dead_letter_topic}, {#dead_letter_max_delivery_attempts=} and {#dead_letter_max_delivery_attempts}.
|
393
|
+
#
|
394
|
+
# @param [Topic] new_dead_letter_topic The topic to which dead letter messages for the subscription should be
|
395
|
+
# published.
|
396
|
+
#
|
397
|
+
# @example
|
398
|
+
# require "google/cloud/pubsub"
|
399
|
+
#
|
400
|
+
# pubsub = Google::Cloud::PubSub.new
|
401
|
+
#
|
402
|
+
# sub = pubsub.subscription "my-topic-sub"
|
403
|
+
# dead_letter_topic = pubsub.topic "my-dead-letter-topic", skip_lookup: true
|
404
|
+
# sub.dead_letter_topic = dead_letter_topic
|
405
|
+
#
|
406
|
+
def dead_letter_topic= new_dead_letter_topic
|
407
|
+
ensure_grpc!
|
408
|
+
dead_letter_policy = @grpc.dead_letter_policy || Google::Cloud::PubSub::V1::DeadLetterPolicy.new
|
409
|
+
dead_letter_policy.dead_letter_topic = new_dead_letter_topic.name
|
410
|
+
update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, dead_letter_policy: dead_letter_policy
|
411
|
+
@grpc = service.update_subscription update_grpc, :dead_letter_policy
|
412
|
+
@resource_name = nil
|
413
|
+
end
|
414
|
+
|
415
|
+
##
|
416
|
+
# Returns the maximum number of delivery attempts for any message in the subscription's dead letter policy if a
|
417
|
+
# dead letter policy is configured, otherwise `nil`. Dead lettering is done on a best effort basis. The same
|
418
|
+
# message might be dead lettered multiple times. The value must be between 5 and 100.
|
419
|
+
#
|
420
|
+
# The number of delivery attempts is defined as 1 + (the sum of number of NACKs and number of times the
|
421
|
+
# acknowledgement deadline has been exceeded for the message). A NACK is any call to ModifyAckDeadline with a 0
|
422
|
+
# deadline. Note that client libraries may automatically extend ack_deadlines.
|
423
|
+
#
|
424
|
+
# This field will be honored on a best effort basis. If this parameter is 0, a default value of 5 is used.
|
425
|
+
#
|
426
|
+
# See also {#dead_letter_max_delivery_attempts=}, {#dead_letter_topic=} and {#dead_letter_topic}.
|
427
|
+
#
|
428
|
+
# Makes an API call to retrieve the value when called on a reference object. See {#reference?}.
|
429
|
+
#
|
430
|
+
# @return [Integer, nil] A value between 5 and 100, or `nil` if no dead letter policy is configured. If this
|
431
|
+
# value is 0, a default value of 5 is used.
|
432
|
+
#
|
433
|
+
# @example
|
434
|
+
# require "google/cloud/pubsub"
|
435
|
+
#
|
436
|
+
# pubsub = Google::Cloud::PubSub.new
|
437
|
+
#
|
438
|
+
# sub = pubsub.subscription "my-topic-sub"
|
439
|
+
# sub.dead_letter_topic.name #=> "projects/my-project/topics/my-dead-letter-topic"
|
440
|
+
# sub.dead_letter_max_delivery_attempts #=> 10
|
441
|
+
#
|
442
|
+
def dead_letter_max_delivery_attempts
|
443
|
+
ensure_grpc!
|
444
|
+
@grpc.dead_letter_policy&.max_delivery_attempts
|
445
|
+
end
|
446
|
+
|
447
|
+
##
|
448
|
+
# Sets the maximum number of delivery attempts for any message in the subscription's dead letter policy.
|
449
|
+
# Dead lettering is done on a best effort basis. The same message might be dead lettered multiple times.
|
450
|
+
# The value must be between 5 and 100.
|
451
|
+
#
|
452
|
+
# The number of delivery attempts is defined as 1 + (the sum of number of NACKs and number of times the
|
453
|
+
# acknowledgement deadline has been exceeded for the message). A NACK is any call to ModifyAckDeadline with a 0
|
454
|
+
# deadline. Note that client libraries may automatically extend ack_deadlines.
|
455
|
+
#
|
456
|
+
# This field will be honored on a best effort basis. If this parameter is 0, a default value of 5 is used.
|
457
|
+
#
|
458
|
+
# The dead letter topic must also be set. See {#dead_letter_topic=} and {#dead_letter_topic}.
|
459
|
+
#
|
460
|
+
# @param [Integer] new_dead_letter_max_delivery_attempts A value between 5 and 100. If this parameter is 0, a
|
461
|
+
# default value of 5 is used.
|
462
|
+
#
|
463
|
+
# @example
|
464
|
+
# require "google/cloud/pubsub"
|
465
|
+
#
|
466
|
+
# pubsub = Google::Cloud::PubSub.new
|
467
|
+
#
|
468
|
+
# sub = pubsub.subscription "my-topic-sub"
|
469
|
+
# sub.dead_letter_topic.name #=> "projects/my-project/topics/my-dead-letter-topic"
|
470
|
+
#
|
471
|
+
# sub.dead_letter_max_delivery_attempts = 20
|
472
|
+
#
|
473
|
+
def dead_letter_max_delivery_attempts= new_dead_letter_max_delivery_attempts
|
474
|
+
ensure_grpc!
|
475
|
+
unless @grpc.dead_letter_policy&.dead_letter_topic
|
476
|
+
# Service error message "3:Invalid resource name given (name=)." does not identify param.
|
477
|
+
raise ArgumentError, "dead_letter_topic is required with dead_letter_max_delivery_attempts"
|
478
|
+
end
|
479
|
+
dead_letter_policy = @grpc.dead_letter_policy || Google::Cloud::PubSub::V1::DeadLetterPolicy.new
|
480
|
+
dead_letter_policy.max_delivery_attempts = new_dead_letter_max_delivery_attempts
|
481
|
+
update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, dead_letter_policy: dead_letter_policy
|
482
|
+
@grpc = service.update_subscription update_grpc, :dead_letter_policy
|
483
|
+
@resource_name = nil
|
484
|
+
end
|
485
|
+
|
354
486
|
##
|
355
487
|
# Whether message ordering has been enabled. When enabled, messages
|
356
488
|
# published with the same `ordering_key` will be delivered in the order
|
@@ -285,6 +285,18 @@ module Google
|
|
285
285
|
# Managing Labels](https://cloud.google.com/pubsub/docs/labels).
|
286
286
|
# @param [Boolean] message_ordering Whether to enable message ordering
|
287
287
|
# on the subscription.
|
288
|
+
# @param [Topic] dead_letter_topic The {Topic} to which dead letter messages for the subscription should be
|
289
|
+
# published. Dead lettering is done on a best effort basis. The same message might be dead lettered multiple
|
290
|
+
# times. The Cloud Pub/Sub service account associated with the enclosing subscription's parent project (i.e.,
|
291
|
+
# `service-\\{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com`) must have permission to Publish() to
|
292
|
+
# this topic.
|
293
|
+
#
|
294
|
+
# The operation will fail if the topic does not exist. Users should ensure that there is a subscription
|
295
|
+
# attached to this topic since messages published to a topic with no subscriptions are lost.
|
296
|
+
# @param [Integer] dead_letter_max_delivery_attempts The maximum number of delivery attempts for any message in
|
297
|
+
# the subscription's dead letter policy. Dead lettering is done on a best effort basis. The same message might
|
298
|
+
# be dead lettered multiple times. The value must be between 5 and 100. If this parameter is 0, a default
|
299
|
+
# value of 5 is used. The `dead_letter_topic` must also be set.
|
288
300
|
#
|
289
301
|
# @return [Google::Cloud::PubSub::Subscription]
|
290
302
|
#
|
@@ -307,11 +319,38 @@ module Google
|
|
307
319
|
# deadline: 120,
|
308
320
|
# endpoint: "https://example.com/push"
|
309
321
|
#
|
322
|
+
# @example Configure a Dead Letter Queues policy:
|
323
|
+
# require "google/cloud/pubsub"
|
324
|
+
#
|
325
|
+
# pubsub = Google::Cloud::PubSub.new
|
326
|
+
#
|
327
|
+
# # Dead Letter Queue (DLQ) testing requires IAM bindings to the Cloud Pub/Sub service account that is
|
328
|
+
# # automatically created and managed by the service team in a private project.
|
329
|
+
# my_project_number = "000000000000"
|
330
|
+
# service_account_email = "serviceAccount:service-#{my_project_number}@gcp-sa-pubsub.iam.gserviceaccount.com"
|
331
|
+
#
|
332
|
+
# dead_letter_topic = pubsub.topic "my-dead-letter-topic"
|
333
|
+
# dead_letter_subscription = dead_letter_topic.subscribe "my-dead-letter-sub"
|
334
|
+
#
|
335
|
+
# dead_letter_topic.policy { |p| p.add "roles/pubsub.publisher", service_account_email }
|
336
|
+
# dead_letter_subscription.policy { |p| p.add "roles/pubsub.subscriber", service_account_email }
|
337
|
+
#
|
338
|
+
# topic = pubsub.topic "my-topic"
|
339
|
+
# sub = topic.subscribe "my-topic-sub",
|
340
|
+
# dead_letter_topic: dead_letter_topic,
|
341
|
+
# dead_letter_max_delivery_attempts: 10
|
342
|
+
#
|
310
343
|
def subscribe subscription_name, deadline: nil, retain_acked: false, retention: nil, endpoint: nil, labels: nil,
|
311
|
-
message_ordering: nil
|
344
|
+
message_ordering: nil, dead_letter_topic: nil, dead_letter_max_delivery_attempts: nil
|
312
345
|
ensure_service!
|
313
346
|
options = { deadline: deadline, retain_acked: retain_acked, retention: retention, endpoint: endpoint,
|
314
|
-
labels: labels, message_ordering: message_ordering
|
347
|
+
labels: labels, message_ordering: message_ordering,
|
348
|
+
dead_letter_max_delivery_attempts: dead_letter_max_delivery_attempts }
|
349
|
+
options[:dead_letter_topic_name] = dead_letter_topic.name if dead_letter_topic
|
350
|
+
if options[:dead_letter_max_delivery_attempts] && !options[:dead_letter_topic_name]
|
351
|
+
# Service error message "3:Invalid resource name given (name=)." does not identify param.
|
352
|
+
raise ArgumentError, "dead_letter_topic is required with dead_letter_max_delivery_attempts"
|
353
|
+
end
|
315
354
|
grpc = service.create_subscription name, subscription_name, options
|
316
355
|
Subscription.from_grpc grpc, service
|
317
356
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-pubsub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Moore
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-02-
|
12
|
+
date: 2020-02-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: concurrent-ruby
|