google-cloud-pubsub 1.7.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +2 -1
  3. data/CHANGELOG.md +53 -0
  4. data/OVERVIEW.md +26 -58
  5. data/lib/google-cloud-pubsub.rb +14 -13
  6. data/lib/google/cloud/pubsub.rb +15 -18
  7. data/lib/google/cloud/pubsub/async_publisher.rb +2 -3
  8. data/lib/google/cloud/pubsub/credentials.rb +2 -2
  9. data/lib/google/cloud/pubsub/message.rb +1 -1
  10. data/lib/google/cloud/pubsub/project.rb +1 -1
  11. data/lib/google/cloud/pubsub/received_message.rb +4 -4
  12. data/lib/google/cloud/pubsub/service.rb +110 -260
  13. data/lib/google/cloud/pubsub/subscriber.rb +3 -3
  14. data/lib/google/cloud/pubsub/subscriber/stream.rb +3 -2
  15. data/lib/google/cloud/pubsub/subscription.rb +86 -11
  16. data/lib/google/cloud/pubsub/subscription/push_config.rb +55 -31
  17. data/lib/google/cloud/pubsub/topic.rb +52 -14
  18. data/lib/google/cloud/pubsub/version.rb +1 -1
  19. metadata +8 -79
  20. data/lib/google/cloud/pubsub/v1.rb +0 -17
  21. data/lib/google/cloud/pubsub/v1/credentials.rb +0 -41
  22. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +0 -21
  23. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/options.rb +0 -21
  24. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +0 -21
  25. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -91
  26. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +0 -29
  27. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -222
  28. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -113
  29. data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -807
  30. data/lib/google/cloud/pubsub/v1/doc/google/type/expr.rb +0 -19
  31. data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -928
  32. data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -120
  33. data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1463
  34. data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -153
  35. data/lib/google/pubsub/v1/pubsub_pb.rb +0 -266
  36. data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -215
@@ -41,7 +41,7 @@ module Google
41
41
  # subscriber.start
42
42
  #
43
43
  # # Shut down the subscriber when ready to stop receiving messages.
44
- # subscriber.stop.wait!
44
+ # subscriber.stop!
45
45
  #
46
46
  # @attr_reader [String] subscription_name The name of the subscription the
47
47
  # messages are pulled from.
@@ -240,7 +240,7 @@ module Google
240
240
  # subscriber.start
241
241
  #
242
242
  # # Shut down the subscriber when ready to stop receiving messages.
243
- # subscriber.stop.wait!
243
+ # subscriber.stop!
244
244
  #
245
245
  def on_error &block
246
246
  synchronize do
@@ -276,7 +276,7 @@ module Google
276
276
  # subscriber.last_error #=> nil
277
277
  #
278
278
  # # Shut down the subscriber when ready to stop receiving messages.
279
- # subscriber.stop.wait!
279
+ # subscriber.stop!
280
280
  #
281
281
  def last_error
282
282
  synchronize { @last_error }
@@ -271,9 +271,8 @@ module Google
271
271
  stop
272
272
  rescue GRPC::Cancelled, GRPC::DeadlineExceeded, GRPC::Internal,
273
273
  GRPC::ResourceExhausted, GRPC::Unauthenticated,
274
- GRPC::Unavailable, GRPC::Core::CallError
274
+ GRPC::Unavailable
275
275
  # Restart the stream with an incremental back for a retriable error.
276
- # Also when GRPC raises the internal CallError.
277
276
 
278
277
  retry
279
278
  rescue RestartStream
@@ -364,6 +363,8 @@ module Google
364
363
  req.modify_deadline_ack_ids += @inventory.ack_ids
365
364
  req.modify_deadline_seconds += @inventory.ack_ids.map { @subscriber.deadline }
366
365
  req.client_id = @subscriber.service.client_id
366
+ req.max_outstanding_messages = @inventory.limit
367
+ req.max_outstanding_bytes = @inventory.bytesize
367
368
  end
368
369
  end
369
370
 
@@ -43,12 +43,19 @@ module Google
43
43
  # received_message.acknowledge!
44
44
  # end
45
45
  #
46
- # # Start background threads that will call the block passed to listen.
47
- # subscriber.start
46
+ # # Handle exceptions from listener
47
+ # subscriber.on_error do |exception|
48
+ # puts "Exception: #{exception.class} #{exception.message}"
49
+ # end
48
50
  #
49
- # # Shut down the subscriber when ready to stop receiving messages.
50
- # subscriber.stop.wait!
51
+ # # Gracefully shut down the subscriber
52
+ # at_exit do
53
+ # subscriber.stop!
54
+ # end
51
55
  #
56
+ # # Start background threads that will call the block passed to listen.
57
+ # subscriber.start
58
+ # sleep
52
59
  class Subscription
53
60
  ##
54
61
  # @private The Service object.
@@ -323,7 +330,7 @@ module Google
323
330
  # If {#expires_in=} is not set, a *default* value of of 31 days will be
324
331
  # used. The minimum allowed value is 1 day.
325
332
  #
326
- # Makes an API call to retrieve the labels value when called on a
333
+ # Makes an API call to retrieve the value when called on a
327
334
  # reference object. See {#reference?}.
328
335
  #
329
336
  # @return [Numeric, nil] The expiration duration, or `nil` if unset.
@@ -346,13 +353,25 @@ module Google
346
353
  # to unset.
347
354
  #
348
355
  def expires_in= ttl
349
- new_expiration_policy = Google::Pubsub::V1::ExpirationPolicy.new ttl: Convert.number_to_duration(ttl)
356
+ new_expiration_policy = Google::Cloud::PubSub::V1::ExpirationPolicy.new ttl: Convert.number_to_duration(ttl)
350
357
 
351
358
  update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, expiration_policy: new_expiration_policy
352
359
  @grpc = service.update_subscription update_grpc, :expiration_policy
353
360
  @resource_name = nil
354
361
  end
355
362
 
363
+ ##
364
+ # An expression written in the Cloud Pub/Sub filter language. If non-empty, then only {Message} instances whose
365
+ # `attributes` field matches the filter are delivered on this subscription. If empty, then no messages are
366
+ # filtered out.
367
+ #
368
+ # @return [String] The frozen filter string.
369
+ #
370
+ def filter
371
+ ensure_grpc!
372
+ @grpc.filter.freeze
373
+ end
374
+
356
375
  ##
357
376
  # Returns the {Topic} to which dead letter messages should be published if a dead letter policy is configured,
358
377
  # otherwise `nil`. Dead lettering is done on a best effort basis. The same message might be dead lettered
@@ -554,7 +573,7 @@ module Google
554
573
  #
555
574
  # See {Topic#publish_async}, {#listen}, and {Message#ordering_key}.
556
575
  #
557
- # Makes an API call to retrieve the retain_acked value when called on a
576
+ # Makes an API call to retrieve the enable_message_ordering value when called on a
558
577
  # reference object. See {#reference?}.
559
578
  #
560
579
  # @return [Boolean]
@@ -564,6 +583,35 @@ module Google
564
583
  @grpc.enable_message_ordering
565
584
  end
566
585
 
586
+ ##
587
+ # Whether the subscription is detached from its topic. Detached subscriptions don't receive messages from their
588
+ # topic and don't retain any backlog. {#pull} and {#listen} (pull and streaming pull) operations will raise
589
+ # `FAILED_PRECONDITION`. If the subscription is a push subscription (see {#push_config}), pushes to the endpoint
590
+ # will not be made. The default value is `false`.
591
+ #
592
+ # See {Topic#subscribe} and {#detach}.
593
+ #
594
+ # Makes an API call to retrieve the value when called on a
595
+ # reference object. See {#reference?}.
596
+ #
597
+ # @return [Boolean]
598
+ #
599
+ # @example
600
+ # require "google/cloud/pubsub"
601
+ #
602
+ # pubsub = Google::Cloud::PubSub.new
603
+ #
604
+ # sub = pubsub.subscription "my-topic-sub"
605
+ # sub.detach
606
+ #
607
+ # # sleep 120
608
+ # sub.detached? #=> true
609
+ #
610
+ def detached?
611
+ ensure_grpc!
612
+ @grpc.detached
613
+ end
614
+
567
615
  ##
568
616
  # Determines whether the subscription exists in the Pub/Sub service.
569
617
  #
@@ -611,6 +659,32 @@ module Google
611
659
  true
612
660
  end
613
661
 
662
+ ##
663
+ # Detaches a subscription from its topic. All messages retained in the subscription are dropped. Detached
664
+ # subscriptions don't receive messages from their topic and don't retain any backlog. Subsequent {#pull} and
665
+ # {#listen} (pull and streaming pull) operations will raise `FAILED_PRECONDITION`. If the subscription is a push
666
+ # subscription (see {#push_config}), pushes to the endpoint will stop. It may take a few minutes for the
667
+ # subscription's detached state to be reflected in subsequent calls to {#detached?}.
668
+ #
669
+ # @return [Boolean] Returns `true` if the detach operation was successful.
670
+ #
671
+ # @example
672
+ # require "google/cloud/pubsub"
673
+ #
674
+ # pubsub = Google::Cloud::PubSub.new
675
+ #
676
+ # sub = pubsub.subscription "my-topic-sub"
677
+ # sub.detach
678
+ #
679
+ # # sleep 120
680
+ # sub.detached? #=> true
681
+ #
682
+ def detach
683
+ ensure_service!
684
+ service.detach_subscription name
685
+ true
686
+ end
687
+
614
688
  ##
615
689
  # Pulls messages from the server. Returns an empty list if there are no
616
690
  # messages available in the backlog. Raises an ApiError with status
@@ -789,6 +863,7 @@ module Google
789
863
  #
790
864
  # subscriber = sub.listen do |received_message|
791
865
  # # process message
866
+ # puts "Data: #{received_message.message.data}, published at #{received_message.message.published_at}"
792
867
  # received_message.acknowledge!
793
868
  # end
794
869
  #
@@ -796,7 +871,7 @@ module Google
796
871
  # subscriber.start
797
872
  #
798
873
  # # Shut down the subscriber when ready to stop receiving messages.
799
- # subscriber.stop.wait!
874
+ # subscriber.stop!
800
875
  #
801
876
  # @example Configuring to increase concurrent callbacks:
802
877
  # require "google/cloud/pubsub"
@@ -815,7 +890,7 @@ module Google
815
890
  # subscriber.start
816
891
  #
817
892
  # # Shut down the subscriber when ready to stop receiving messages.
818
- # subscriber.stop.wait!
893
+ # subscriber.stop!
819
894
  #
820
895
  # @example Ordered messages are supported using ordering_key:
821
896
  # require "google/cloud/pubsub"
@@ -835,7 +910,7 @@ module Google
835
910
  # subscriber.start
836
911
  #
837
912
  # # Shut down the subscriber when ready to stop receiving messages.
838
- # subscriber.stop.wait!
913
+ # subscriber.stop!
839
914
  #
840
915
  # @example Set the maximum amount of time before redelivery if the subscriber fails to extend the deadline:
841
916
  # require "google/cloud/pubsub"
@@ -854,7 +929,7 @@ module Google
854
929
  # subscriber.start
855
930
  #
856
931
  # # Shut down the subscriber when ready to stop receiving messages.
857
- # subscriber.stop.wait!
932
+ # subscriber.stop!
858
933
  #
859
934
  def listen deadline: nil, message_ordering: nil, streams: nil, inventory: nil, threads: {}, &block
860
935
  ensure_service!
@@ -22,7 +22,18 @@ module Google
22
22
  ##
23
23
  # Configuration for a push delivery endpoint.
24
24
  #
25
- # @example
25
+ # @example Create a push config:
26
+ # require "google/cloud/pubsub"
27
+ #
28
+ # pubsub = Google::Cloud::PubSub.new
29
+ # topic = pubsub.topic "my-topic"
30
+ #
31
+ # push_config = Google::Cloud::PubSub::Subscription::PushConfig.new endpoint: "http://example.net/callback"
32
+ # push_config.set_oidc_token "service-account@example.net", "audience-header-value"
33
+ #
34
+ # sub = topic.subscribe "my-subscription", push_config: push_config
35
+ #
36
+ # @example Read a push config:
26
37
  # require "google/cloud/pubsub"
27
38
  #
28
39
  # pubsub = Google::Cloud::PubSub.new
@@ -32,7 +43,7 @@ module Google
32
43
  # sub.push_config.authentication.email #=> "user@example.com"
33
44
  # sub.push_config.authentication.audience #=> "client-12345"
34
45
  #
35
- # @example Update the push configuration by passing a block:
46
+ # @example Update a push config:
36
47
  # require "google/cloud/pubsub"
37
48
  #
38
49
  # pubsub = Google::Cloud::PubSub.new
@@ -45,14 +56,31 @@ module Google
45
56
  #
46
57
  class PushConfig
47
58
  ##
48
- # @private
49
- def initialize
59
+ # Creates a new push configuration.
60
+ #
61
+ # @param [String] endpoint A URL locating the endpoint to which messages should be pushed. For
62
+ # example, a Webhook endpoint might use `https://example.com/push`.
63
+ # @param [String] email The service account email to be used for generating the OIDC token.
64
+ # The caller must have the `iam.serviceAccounts.actAs` permission for the service account.
65
+ # @param [String] audience The audience to be used when generating OIDC token. The audience claim identifies
66
+ # the recipients that the JWT is intended for. The audience value is a single case-sensitive string. Having
67
+ # multiple values (array) for the audience field is not supported. More info about the OIDC JWT token
68
+ # audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, the `endpoint`
69
+ # URL will be used.
70
+ #
71
+ def initialize endpoint: nil, email: nil, audience: nil
50
72
  @grpc = Google::Cloud::PubSub::V1::PushConfig.new
73
+
74
+ self.endpoint = endpoint unless endpoint.nil?
75
+
76
+ raise ArgumentError, "audience provided without email. Authentication is invalid" if audience && !email
77
+
78
+ set_oidc_token email, audience if email
51
79
  end
52
80
 
53
81
  ##
54
- # A URL locating the endpoint to which messages should be pushed. For
55
- # example, a Webhook endpoint might use `https://example.com/push`.
82
+ # A URL locating the endpoint to which messages should be pushed. For example, a Webhook endpoint might use
83
+ # `https://example.com/push`.
56
84
  #
57
85
  # @return [String]
58
86
  def endpoint
@@ -60,9 +88,8 @@ module Google
60
88
  end
61
89
 
62
90
  ##
63
- # Sets the URL locating the endpoint to which messages should be
64
- # pushed. For example, a Webhook endpoint might use
65
- # `https://example.com/push`.
91
+ # Sets the URL locating the endpoint to which messages should be pushed. For example, a Webhook endpoint might
92
+ # use `https://example.com/push`.
66
93
  #
67
94
  # @param [String, nil] new_endpoint New URL value
68
95
  def endpoint= new_endpoint
@@ -70,8 +97,7 @@ module Google
70
97
  end
71
98
 
72
99
  ##
73
- # The authentication method used by push endpoints to verify the
74
- # source of push requests.
100
+ # The authentication method used by push endpoints to verify the source of push requests.
75
101
  #
76
102
  # @return [OidcToken, nil] An OIDC JWT token if specified, `nil`
77
103
  # otherwise.
@@ -82,8 +108,7 @@ module Google
82
108
  end
83
109
 
84
110
  ##
85
- # Sets the authentication method used by push endpoints to verify the
86
- # source of push requests.
111
+ # Sets the authentication method used by push endpoints to verify the source of push requests.
87
112
  #
88
113
  # @param [OidcToken, nil] new_auth An authentication value.
89
114
  def authentication= new_auth
@@ -118,13 +143,12 @@ module Google
118
143
  end
119
144
 
120
145
  ##
121
- # The format of the pushed message. This attribute indicates the
122
- # version of the data expected by the endpoint. This controls the
123
- # shape of the pushed message (i.e., its fields and metadata). The
124
- # endpoint version is based on the version of the Pub/Sub API.
146
+ # The format of the pushed message. This attribute indicates the version of the data expected by the endpoint.
147
+ # This controls the shape of the pushed message (i.e., its fields and metadata). The endpoint version is based
148
+ # on the version of the Pub/Sub API.
125
149
  #
126
- # If not present during the Subscription creation, it will default to
127
- # the version of the API used to make such call.
150
+ # If not present during the Subscription creation, it will default to the version of the API used to make such
151
+ # call.
128
152
  #
129
153
  # The possible values for this attribute are:
130
154
  #
@@ -182,7 +206,8 @@ module Google
182
206
  end
183
207
 
184
208
  ##
185
- # Service account email to be used for generating the OIDC token.
209
+ # The service account email to be used for generating the OIDC token. The caller must have the
210
+ # `iam.serviceAccounts.actAs` permission for the service account.
186
211
  #
187
212
  # @return [String]
188
213
  def email
@@ -190,7 +215,8 @@ module Google
190
215
  end
191
216
 
192
217
  ##
193
- # Service account email to be used for generating the OIDC token.
218
+ # Sets the service account email to be used for generating the OIDC token. The caller must have the
219
+ # `iam.serviceAccounts.actAs` permission for the service account.
194
220
  #
195
221
  # @param [String] new_email New service account email value.
196
222
  def email= new_email
@@ -198,15 +224,10 @@ module Google
198
224
  end
199
225
 
200
226
  ##
201
- # Audience to be used when generating OIDC token. The audience claim
202
- # identifies the recipients that the JWT is intended for. The
203
- # audience value is a single case-sensitive string.
204
- #
205
- # Having multiple values (array) for the audience field is not
206
- # supported.
207
- #
208
- # More info about the OIDC JWT token audience here:
209
- # https://tools.ietf.org/html/rfc7519#section-4.1.3
227
+ # The audience to be used when generating OIDC token. The audience claim identifies the recipients that
228
+ # the JWT is intended for. The audience value is a single case-sensitive string. Having multiple values
229
+ # (array) for the audience field is not supported. More info about the OIDC JWT token audience here:
230
+ # https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, the `endpoint` URL will be used.
210
231
  #
211
232
  # @return [String]
212
233
  def audience
@@ -214,7 +235,10 @@ module Google
214
235
  end
215
236
 
216
237
  ##
217
- # Sets the audience to be used when generating OIDC token.
238
+ # Sets the audience to be used when generating OIDC token. The audience claim identifies the recipients that
239
+ # the JWT is intended for. The audience value is a single case-sensitive string. Having multiple values
240
+ # (array) for the audience field is not supported. More info about the OIDC JWT token audience here:
241
+ # https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, the `endpoint` URL will be used.
218
242
  #
219
243
  # @param [String] new_audience New audience value.
220
244
  def audience= new_audience
@@ -78,7 +78,7 @@ module Google
78
78
  # end
79
79
  # end
80
80
  #
81
- # topic.async_publisher.stop.wait!
81
+ # topic.async_publisher.stop!
82
82
  #
83
83
  def async_publisher
84
84
  @async_publisher
@@ -275,7 +275,10 @@ module Google
275
275
  # 604,800 seconds (7 days) or less than 600 seconds (10 minutes).
276
276
  # Default is 604,800 seconds (7 days).
277
277
  # @param [String] endpoint A URL locating the endpoint to which messages
278
- # should be pushed.
278
+ # should be pushed. The parameters `push_config` and `endpoint` should not both be provided.
279
+ # @param [Google::Cloud::PubSub::Subscription::PushConfig] push_config The configuration for a push delivery
280
+ # endpoint that should contain the endpoint, and can contain authentication data (OIDC token authentication).
281
+ # The parameters `push_config` and `endpoint` should not both be provided.
279
282
  # @param [Hash] labels A hash of user-provided labels associated with
280
283
  # the subscription. You can use these to organize and group your
281
284
  # subscriptions. Label keys and values can be no longer than 63
@@ -286,6 +289,9 @@ module Google
286
289
  # Managing Labels](https://cloud.google.com/pubsub/docs/labels).
287
290
  # @param [Boolean] message_ordering Whether to enable message ordering
288
291
  # on the subscription.
292
+ # @param [String] filter An expression written in the Cloud Pub/Sub filter language. If non-empty, then only
293
+ # {Message} instances whose `attributes` field matches the filter are delivered on this subscription. If
294
+ # empty, then no messages are filtered out. Optional.
289
295
  # @param [Topic] dead_letter_topic The {Topic} to which dead letter messages for the subscription should be
290
296
  # published. Dead lettering is done on a best effort basis. The same message might be dead lettered multiple
291
297
  # times. The Cloud Pub/Sub service account associated with the enclosing subscription's parent project (i.e.,
@@ -317,15 +323,25 @@ module Google
317
323
  # sub = topic.subscribe "my-topic-sub"
318
324
  # sub.name # => "my-topic-sub"
319
325
  #
320
- # @example Wait 2 minutes for acknowledgement and push all to endpoint:
326
+ # @example Wait 2 minutes for acknowledgement:
321
327
  # require "google/cloud/pubsub"
322
328
  #
323
329
  # pubsub = Google::Cloud::PubSub.new
324
330
  #
325
331
  # topic = pubsub.topic "my-topic"
326
332
  # sub = topic.subscribe "my-topic-sub",
327
- # deadline: 120,
328
- # endpoint: "https://example.com/push"
333
+ # deadline: 120
334
+ #
335
+ # @example Configure a push endpoint:
336
+ # require "google/cloud/pubsub"
337
+ #
338
+ # pubsub = Google::Cloud::PubSub.new
339
+ # topic = pubsub.topic "my-topic"
340
+ #
341
+ # push_config = Google::Cloud::PubSub::Subscription::PushConfig.new endpoint: "http://example.net/callback"
342
+ # push_config.set_oidc_token "service-account@example.net", "audience-header-value"
343
+ #
344
+ # sub = topic.subscribe "my-subscription", push_config: push_config
329
345
  #
330
346
  # @example Configure a Dead Letter Queues policy:
331
347
  # require "google/cloud/pubsub"
@@ -358,18 +374,40 @@ module Google
358
374
  # retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
359
375
  # sub = topic.subscribe "my-topic-sub", retry_policy: retry_policy
360
376
  #
361
- def subscribe subscription_name, deadline: nil, retain_acked: false, retention: nil, endpoint: nil, labels: nil,
362
- message_ordering: nil, dead_letter_topic: nil, dead_letter_max_delivery_attempts: nil,
377
+ def subscribe subscription_name,
378
+ deadline: nil,
379
+ retain_acked: false,
380
+ retention: nil,
381
+ endpoint: nil,
382
+ push_config: nil,
383
+ labels: nil,
384
+ message_ordering: nil,
385
+ filter: nil,
386
+ dead_letter_topic: nil,
387
+ dead_letter_max_delivery_attempts: nil,
363
388
  retry_policy: nil
364
389
  ensure_service!
365
- options = { deadline: deadline, retain_acked: retain_acked, retention: retention, endpoint: endpoint,
366
- labels: labels, message_ordering: message_ordering,
367
- dead_letter_max_delivery_attempts: dead_letter_max_delivery_attempts }
390
+ if push_config && endpoint
391
+ raise ArgumentError, "endpoint and push_config were both provided. Please provide only one."
392
+ end
393
+ push_config = Google::Cloud::PubSub::Subscription::PushConfig.new endpoint: endpoint if endpoint
394
+
395
+ options = {
396
+ deadline: deadline,
397
+ retain_acked: retain_acked,
398
+ retention: retention,
399
+ labels: labels,
400
+ message_ordering: message_ordering,
401
+ filter: filter,
402
+ dead_letter_max_delivery_attempts: dead_letter_max_delivery_attempts
403
+ }
404
+
368
405
  options[:dead_letter_topic_name] = dead_letter_topic.name if dead_letter_topic
369
406
  if options[:dead_letter_max_delivery_attempts] && !options[:dead_letter_topic_name]
370
407
  # Service error message "3:Invalid resource name given (name=)." does not identify param.
371
408
  raise ArgumentError, "dead_letter_topic is required with dead_letter_max_delivery_attempts"
372
409
  end
410
+ options[:push_config] = push_config.to_grpc if push_config
373
411
  options[:retry_policy] = retry_policy.to_grpc if retry_policy
374
412
  grpc = service.create_subscription name, subscription_name, options
375
413
  Subscription.from_grpc grpc, service
@@ -586,7 +624,7 @@ module Google
586
624
  # end
587
625
  #
588
626
  # # Shut down the publisher when ready to stop publishing messages.
589
- # topic.async_publisher.stop.wait!
627
+ # topic.async_publisher.stop!
590
628
  #
591
629
  # @example A message can be published using a File object:
592
630
  # require "google/cloud/pubsub"
@@ -598,7 +636,7 @@ module Google
598
636
  # topic.publish_async file
599
637
  #
600
638
  # # Shut down the publisher when ready to stop publishing messages.
601
- # topic.async_publisher.stop.wait!
639
+ # topic.async_publisher.stop!
602
640
  #
603
641
  # @example Additionally, a message can be published with attributes:
604
642
  # require "google/cloud/pubsub"
@@ -610,7 +648,7 @@ module Google
610
648
  # foo: :bar, this: :that
611
649
  #
612
650
  # # Shut down the publisher when ready to stop publishing messages.
613
- # topic.async_publisher.stop.wait!
651
+ # topic.async_publisher.stop!
614
652
  #
615
653
  # @example Ordered messages are supported using ordering_key:
616
654
  # require "google/cloud/pubsub"
@@ -627,7 +665,7 @@ module Google
627
665
  # ordering_key: "task-key"
628
666
  #
629
667
  # # Shut down the publisher when ready to stop publishing messages.
630
- # topic.async_publisher.stop.wait!
668
+ # topic.async_publisher.stop!
631
669
  #
632
670
  def publish_async data = nil, attributes = nil, ordering_key: nil, **extra_attrs, &callback
633
671
  ensure_service!