google-cloud-pubsub 2.4.0 → 2.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/AUTHENTICATION.md +2 -1
- data/CHANGELOG.md +55 -0
- data/CONTRIBUTING.md +2 -3
- data/OVERVIEW.md +9 -6
- data/lib/google/cloud/pubsub.rb +0 -4
- data/lib/google/cloud/pubsub/async_publisher.rb +42 -6
- data/lib/google/cloud/pubsub/async_publisher/batch.rb +2 -6
- data/lib/google/cloud/pubsub/batch_publisher.rb +31 -30
- data/lib/google/cloud/pubsub/errors.rb +8 -0
- data/lib/google/cloud/pubsub/flow_controller.rb +139 -0
- data/lib/google/cloud/pubsub/project.rb +248 -11
- data/lib/google/cloud/pubsub/schema.rb +310 -0
- data/lib/google/cloud/pubsub/schema/list.rb +180 -0
- data/lib/google/cloud/pubsub/service.rb +143 -31
- data/lib/google/cloud/pubsub/snapshot.rb +1 -0
- data/lib/google/cloud/pubsub/subscriber.rb +22 -22
- data/lib/google/cloud/pubsub/subscription.rb +27 -25
- data/lib/google/cloud/pubsub/topic.rb +103 -3
- data/lib/google/cloud/pubsub/version.rb +1 -1
- metadata +20 -3
@@ -733,19 +733,28 @@ module Google
|
|
733
733
|
end
|
734
734
|
|
735
735
|
##
|
736
|
-
# Pulls messages from the server
|
737
|
-
#
|
738
|
-
#
|
739
|
-
#
|
736
|
+
# Pulls messages from the server, blocking until messages are available
|
737
|
+
# when called with the `immediate: false` option, which is recommended
|
738
|
+
# to avoid adverse impacts on the performance of pull operations.
|
739
|
+
#
|
740
|
+
# Raises an API error with status `UNAVAILABLE` if there are too many
|
741
|
+
# concurrent pull requests pending for the given subscription.
|
740
742
|
#
|
741
743
|
# See also {#listen} for the preferred way to process messages as they
|
742
744
|
# become available.
|
743
745
|
#
|
744
|
-
# @param [Boolean] immediate
|
745
|
-
#
|
746
|
-
#
|
747
|
-
#
|
748
|
-
# is
|
746
|
+
# @param [Boolean] immediate Whether to return immediately or block until
|
747
|
+
# messages are available.
|
748
|
+
#
|
749
|
+
# **Warning:** The default value of this field is `true`. However, sending
|
750
|
+
# `true` is discouraged because it adversely impacts the performance of
|
751
|
+
# pull operations. We recommend that users always explicitly set this field
|
752
|
+
# to `false`.
|
753
|
+
#
|
754
|
+
# If this field set to `true`, the system will respond immediately
|
755
|
+
# even if it there are no messages available to return in the pull
|
756
|
+
# response. Otherwise, the system may wait (for a bounded amount of time)
|
757
|
+
# until at least one message is available, rather than returning no messages.
|
749
758
|
#
|
750
759
|
# See also {#listen} for the preferred way to process messages as they
|
751
760
|
# become available.
|
@@ -755,31 +764,24 @@ module Google
|
|
755
764
|
#
|
756
765
|
# @return [Array<Google::Cloud::PubSub::ReceivedMessage>]
|
757
766
|
#
|
758
|
-
# @example
|
767
|
+
# @example The `immediate: false` option is now recommended to avoid adverse impacts on pull operations:
|
759
768
|
# require "google/cloud/pubsub"
|
760
769
|
#
|
761
770
|
# pubsub = Google::Cloud::PubSub.new
|
762
771
|
#
|
763
772
|
# sub = pubsub.subscription "my-topic-sub"
|
764
|
-
# sub.pull
|
765
|
-
#
|
766
|
-
# @example A maximum number of messages returned can also be specified:
|
767
|
-
# require "google/cloud/pubsub"
|
768
|
-
#
|
769
|
-
# pubsub = Google::Cloud::PubSub.new
|
770
|
-
#
|
771
|
-
# sub = pubsub.subscription "my-topic-sub"
|
772
|
-
# sub.pull(max: 10).each do |received_message|
|
773
|
+
# received_messages = sub.pull immediate: false
|
774
|
+
# received_messages.each do |received_message|
|
773
775
|
# received_message.acknowledge!
|
774
776
|
# end
|
775
777
|
#
|
776
|
-
# @example
|
778
|
+
# @example A maximum number of messages returned can also be specified:
|
777
779
|
# require "google/cloud/pubsub"
|
778
780
|
#
|
779
781
|
# pubsub = Google::Cloud::PubSub.new
|
780
782
|
#
|
781
783
|
# sub = pubsub.subscription "my-topic-sub"
|
782
|
-
# received_messages = sub.pull immediate: false
|
784
|
+
# received_messages = sub.pull immediate: false, max: 10
|
783
785
|
# received_messages.each do |received_message|
|
784
786
|
# received_message.acknowledge!
|
785
787
|
# end
|
@@ -1010,7 +1012,7 @@ module Google
|
|
1010
1012
|
# pubsub = Google::Cloud::PubSub.new
|
1011
1013
|
#
|
1012
1014
|
# sub = pubsub.subscription "my-topic-sub"
|
1013
|
-
# received_messages = sub.pull
|
1015
|
+
# received_messages = sub.pull immediate: false
|
1014
1016
|
# sub.acknowledge received_messages
|
1015
1017
|
#
|
1016
1018
|
def acknowledge *messages
|
@@ -1045,7 +1047,7 @@ module Google
|
|
1045
1047
|
# pubsub = Google::Cloud::PubSub.new
|
1046
1048
|
#
|
1047
1049
|
# sub = pubsub.subscription "my-topic-sub"
|
1048
|
-
# received_messages = sub.pull
|
1050
|
+
# received_messages = sub.pull immediate: false
|
1049
1051
|
# sub.modify_ack_deadline 120, received_messages
|
1050
1052
|
#
|
1051
1053
|
def modify_ack_deadline new_deadline, *messages
|
@@ -1143,7 +1145,7 @@ module Google
|
|
1143
1145
|
#
|
1144
1146
|
# snapshot = sub.create_snapshot
|
1145
1147
|
#
|
1146
|
-
# received_messages = sub.pull
|
1148
|
+
# received_messages = sub.pull immediate: false
|
1147
1149
|
# sub.acknowledge received_messages
|
1148
1150
|
#
|
1149
1151
|
# sub.seek snapshot
|
@@ -1156,7 +1158,7 @@ module Google
|
|
1156
1158
|
#
|
1157
1159
|
# time = Time.now
|
1158
1160
|
#
|
1159
|
-
# received_messages = sub.pull
|
1161
|
+
# received_messages = sub.pull immediate: false
|
1160
1162
|
# sub.acknowledge received_messages
|
1161
1163
|
#
|
1162
1164
|
# sub.seek time
|
@@ -233,6 +233,78 @@ module Google
|
|
233
233
|
@resource_name = nil
|
234
234
|
end
|
235
235
|
|
236
|
+
##
|
237
|
+
# The name of the schema that messages published should be validated against, if schema settings are configured
|
238
|
+
# for the topic. The value is a fully-qualified schema name in the form
|
239
|
+
# `projects/{project_id}/schemas/{schema_id}`. If present, {#message_encoding} should also be present. The value
|
240
|
+
# of this field will be `_deleted-schema_` if the schema has been deleted.
|
241
|
+
#
|
242
|
+
# Makes an API call to retrieve the schema settings when called on a reference object. See {#reference?}.
|
243
|
+
#
|
244
|
+
# @return [String, nil] The schema name, or `nil` if schema settings are not configured for the topic.
|
245
|
+
#
|
246
|
+
# @example
|
247
|
+
# require "google/cloud/pubsub"
|
248
|
+
#
|
249
|
+
# pubsub = Google::Cloud::PubSub.new
|
250
|
+
#
|
251
|
+
# topic = pubsub.topic "my-topic"
|
252
|
+
#
|
253
|
+
# topic.schema_name #=> "projects/my-project/schemas/my-schema"
|
254
|
+
#
|
255
|
+
def schema_name
|
256
|
+
ensure_grpc!
|
257
|
+
@grpc.schema_settings&.schema
|
258
|
+
end
|
259
|
+
|
260
|
+
##
|
261
|
+
# The encoding of messages validated against the schema identified by {#schema_name}. If present, {#schema_name}
|
262
|
+
# should also be present. Values include:
|
263
|
+
#
|
264
|
+
# * `JSON` - JSON encoding.
|
265
|
+
# * `BINARY` - Binary encoding, as defined by the schema type. For some schema types, binary encoding may not be
|
266
|
+
# available.
|
267
|
+
#
|
268
|
+
# Makes an API call to retrieve the schema settings when called on a reference object. See {#reference?}.
|
269
|
+
#
|
270
|
+
# @return [Symbol, nil] The schema encoding, or `nil` if schema settings are not configured for the topic.
|
271
|
+
#
|
272
|
+
# @example
|
273
|
+
# require "google/cloud/pubsub"
|
274
|
+
#
|
275
|
+
# pubsub = Google::Cloud::PubSub.new
|
276
|
+
#
|
277
|
+
# topic = pubsub.topic "my-topic"
|
278
|
+
#
|
279
|
+
# topic.message_encoding #=> :JSON
|
280
|
+
#
|
281
|
+
def message_encoding
|
282
|
+
ensure_grpc!
|
283
|
+
@grpc.schema_settings&.encoding
|
284
|
+
end
|
285
|
+
|
286
|
+
##
|
287
|
+
# Checks if the encoding of messages in the schema settings is `BINARY`. See {#message_encoding}.
|
288
|
+
#
|
289
|
+
# Makes an API call to retrieve the schema settings when called on a reference object. See {#reference?}.
|
290
|
+
#
|
291
|
+
# @return [Boolean] `true` when `BINARY`, `false` if not `BINARY` or schema settings is not set.
|
292
|
+
#
|
293
|
+
def message_encoding_binary?
|
294
|
+
message_encoding.to_s.upcase == "BINARY"
|
295
|
+
end
|
296
|
+
|
297
|
+
##
|
298
|
+
# Checks if the encoding of messages in the schema settings is `JSON`. See {#message_encoding}.
|
299
|
+
#
|
300
|
+
# Makes an API call to retrieve the schema settings when called on a reference object. See {#reference?}.
|
301
|
+
#
|
302
|
+
# @return [Boolean] `true` when `JSON`, `false` if not `JSON` or schema settings is not set.
|
303
|
+
#
|
304
|
+
def message_encoding_json?
|
305
|
+
message_encoding.to_s.upcase == "JSON"
|
306
|
+
end
|
307
|
+
|
236
308
|
##
|
237
309
|
# Permanently deletes the topic.
|
238
310
|
#
|
@@ -516,6 +588,8 @@ module Google
|
|
516
588
|
# @param [String, File] data The message payload. This will be converted
|
517
589
|
# to bytes encoded as ASCII-8BIT.
|
518
590
|
# @param [Hash] attributes Optional attributes for the message.
|
591
|
+
# @param [String] ordering_key Identifies related messages for which
|
592
|
+
# publish order should be respected.
|
519
593
|
# @yield [batch] a block for publishing multiple messages in one
|
520
594
|
# request
|
521
595
|
# @yieldparam [BatchPublisher] batch the topic batch publisher
|
@@ -564,10 +638,24 @@ module Google
|
|
564
638
|
# t.publish "task 3 completed", foo: :bif
|
565
639
|
# end
|
566
640
|
#
|
567
|
-
|
641
|
+
# @example Ordered messages are supported using ordering_key:
|
642
|
+
# require "google/cloud/pubsub"
|
643
|
+
#
|
644
|
+
# pubsub = Google::Cloud::PubSub.new
|
645
|
+
#
|
646
|
+
# topic = pubsub.topic "my-ordered-topic"
|
647
|
+
#
|
648
|
+
# # Ensure that message ordering is enabled.
|
649
|
+
# topic.enable_message_ordering!
|
650
|
+
#
|
651
|
+
# # Publish an ordered message with an ordering key.
|
652
|
+
# topic.publish "task completed",
|
653
|
+
# ordering_key: "task-key"
|
654
|
+
#
|
655
|
+
def publish data = nil, attributes = nil, ordering_key: nil, **extra_attrs, &block
|
568
656
|
ensure_service!
|
569
|
-
batch = BatchPublisher.new data, attributes
|
570
|
-
|
657
|
+
batch = BatchPublisher.new data, attributes, ordering_key, extra_attrs
|
658
|
+
block&.call batch
|
571
659
|
return nil if batch.messages.count.zero?
|
572
660
|
publish_batch_messages batch
|
573
661
|
end
|
@@ -596,6 +684,11 @@ module Google
|
|
596
684
|
# @note At the time of this release, ordering keys are not yet publicly
|
597
685
|
# enabled and requires special project enablements.
|
598
686
|
#
|
687
|
+
# Publisher flow control limits the number of outstanding messages that
|
688
|
+
# are allowed to wait to be published. See the `flow_control` key in the
|
689
|
+
# `async` parameter in {Project#topic} for more information about publisher
|
690
|
+
# flow control settings.
|
691
|
+
#
|
599
692
|
# @param [String, File] data The message payload. This will be converted
|
600
693
|
# to bytes encoded as ASCII-8BIT.
|
601
694
|
# @param [Hash] attributes Optional attributes for the message.
|
@@ -615,6 +708,13 @@ module Google
|
|
615
708
|
# message with an `ordering_key` that has already failed when
|
616
709
|
# publishing. Use {#resume_publish} to allow this `ordering_key` to be
|
617
710
|
# published again.
|
711
|
+
# @raise [Google::Cloud::PubSub::FlowControlLimitError] when publish flow
|
712
|
+
# control limits are exceeded, and the `async` parameter key
|
713
|
+
# `flow_control.limit_exceeded_behavior` is set to `:error` or `:block`.
|
714
|
+
# If `flow_control.limit_exceeded_behavior` is set to `:block`, this error
|
715
|
+
# will be raised only when a limit would be exceeded by a single message.
|
716
|
+
# See the `async` parameter in {Project#topic} for more information about
|
717
|
+
# `flow_control` settings.
|
618
718
|
#
|
619
719
|
# @example
|
620
720
|
# require "google/cloud/pubsub"
|
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: 2.
|
4
|
+
version: 2.7.1
|
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: 2021-
|
12
|
+
date: 2021-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: concurrent-ruby
|
@@ -67,6 +67,20 @@ dependencies:
|
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.1'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: avro
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.10'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1.10'
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
85
|
name: google-style
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,12 +233,15 @@ files:
|
|
219
233
|
- lib/google/cloud/pubsub/convert.rb
|
220
234
|
- lib/google/cloud/pubsub/credentials.rb
|
221
235
|
- lib/google/cloud/pubsub/errors.rb
|
236
|
+
- lib/google/cloud/pubsub/flow_controller.rb
|
222
237
|
- lib/google/cloud/pubsub/message.rb
|
223
238
|
- lib/google/cloud/pubsub/policy.rb
|
224
239
|
- lib/google/cloud/pubsub/project.rb
|
225
240
|
- lib/google/cloud/pubsub/publish_result.rb
|
226
241
|
- lib/google/cloud/pubsub/received_message.rb
|
227
242
|
- lib/google/cloud/pubsub/retry_policy.rb
|
243
|
+
- lib/google/cloud/pubsub/schema.rb
|
244
|
+
- lib/google/cloud/pubsub/schema/list.rb
|
228
245
|
- lib/google/cloud/pubsub/service.rb
|
229
246
|
- lib/google/cloud/pubsub/snapshot.rb
|
230
247
|
- lib/google/cloud/pubsub/snapshot/list.rb
|
@@ -259,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
276
|
- !ruby/object:Gem::Version
|
260
277
|
version: '0'
|
261
278
|
requirements: []
|
262
|
-
rubygems_version: 3.2.
|
279
|
+
rubygems_version: 3.2.17
|
263
280
|
signing_key:
|
264
281
|
specification_version: 4
|
265
282
|
summary: API Client library for Google Cloud Pub/Sub
|