pubsub.proto 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466
  1. // Copyright 2022 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. // http://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. syntax = "proto3";
  15. package google.pubsub.v1;
  16. import "google/api/annotations.proto";
  17. import "google/api/client.proto";
  18. import "google/api/field_behavior.proto";
  19. import "google/api/resource.proto";
  20. import "google/protobuf/duration.proto";
  21. import "google/protobuf/empty.proto";
  22. import "google/protobuf/field_mask.proto";
  23. import "google/protobuf/timestamp.proto";
  24. import "google/pubsub/v1/schema.proto";
  25. option cc_enable_arenas = true;
  26. option csharp_namespace = "Google.Cloud.PubSub.V1";
  27. option go_package = "google.golang.org/genproto/googleapis/pubsub/v1;pubsub";
  28. option java_multiple_files = true;
  29. option java_outer_classname = "PubsubProto";
  30. option java_package = "com.google.pubsub.v1";
  31. option php_namespace = "Google\\Cloud\\PubSub\\V1";
  32. option ruby_package = "Google::Cloud::PubSub::V1";
  33. // The service that an application uses to manipulate topics, and to send
  34. // messages to a topic.
  35. service Publisher {
  36. option (google.api.default_host) = "pubsub.googleapis.com";
  37. option (google.api.oauth_scopes) =
  38. "https://www.googleapis.com/auth/cloud-platform,"
  39. "https://www.googleapis.com/auth/pubsub";
  40. // Creates the given topic with the given name. See the [resource name rules]
  41. // (https://cloud.google.com/pubsub/docs/admin#resource_names).
  42. rpc CreateTopic(Topic) returns (Topic) {
  43. option (google.api.http) = {
  44. put: "/v1/{name=projects/*/topics/*}"
  45. body: "*"
  46. };
  47. option (google.api.method_signature) = "name";
  48. }
  49. // Updates an existing topic. Note that certain properties of a
  50. // topic are not modifiable.
  51. rpc UpdateTopic(UpdateTopicRequest) returns (Topic) {
  52. option (google.api.http) = {
  53. patch: "/v1/{topic.name=projects/*/topics/*}"
  54. body: "*"
  55. };
  56. }
  57. // Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic
  58. // does not exist.
  59. rpc Publish(PublishRequest) returns (PublishResponse) {
  60. option (google.api.http) = {
  61. post: "/v1/{topic=projects/*/topics/*}:publish"
  62. body: "*"
  63. };
  64. option (google.api.method_signature) = "topic,messages";
  65. }
  66. // Gets the configuration of a topic.
  67. rpc GetTopic(GetTopicRequest) returns (Topic) {
  68. option (google.api.http) = {
  69. get: "/v1/{topic=projects/*/topics/*}"
  70. };
  71. option (google.api.method_signature) = "topic";
  72. }
  73. // Lists matching topics.
  74. rpc ListTopics(ListTopicsRequest) returns (ListTopicsResponse) {
  75. option (google.api.http) = {
  76. get: "/v1/{project=projects/*}/topics"
  77. };
  78. option (google.api.method_signature) = "project";
  79. }
  80. // Lists the names of the attached subscriptions on this topic.
  81. rpc ListTopicSubscriptions(ListTopicSubscriptionsRequest)
  82. returns (ListTopicSubscriptionsResponse) {
  83. option (google.api.http) = {
  84. get: "/v1/{topic=projects/*/topics/*}/subscriptions"
  85. };
  86. option (google.api.method_signature) = "topic";
  87. }
  88. // Lists the names of the snapshots on this topic. Snapshots are used in
  89. // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
  90. // which allow you to manage message acknowledgments in bulk. That is, you can
  91. // set the acknowledgment state of messages in an existing subscription to the
  92. // state captured by a snapshot.
  93. rpc ListTopicSnapshots(ListTopicSnapshotsRequest)
  94. returns (ListTopicSnapshotsResponse) {
  95. option (google.api.http) = {
  96. get: "/v1/{topic=projects/*/topics/*}/snapshots"
  97. };
  98. option (google.api.method_signature) = "topic";
  99. }
  100. // Deletes the topic with the given name. Returns `NOT_FOUND` if the topic
  101. // does not exist. After a topic is deleted, a new topic may be created with
  102. // the same name; this is an entirely new topic with none of the old
  103. // configuration or subscriptions. Existing subscriptions to this topic are
  104. // not deleted, but their `topic` field is set to `_deleted-topic_`.
  105. rpc DeleteTopic(DeleteTopicRequest) returns (google.protobuf.Empty) {
  106. option (google.api.http) = {
  107. delete: "/v1/{topic=projects/*/topics/*}"
  108. };
  109. option (google.api.method_signature) = "topic";
  110. }
  111. // Detaches a subscription from this topic. All messages retained in the
  112. // subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
  113. // will return FAILED_PRECONDITION. If the subscription is a push
  114. // subscription, pushes to the endpoint will stop.
  115. rpc DetachSubscription(DetachSubscriptionRequest)
  116. returns (DetachSubscriptionResponse) {
  117. option (google.api.http) = {
  118. post: "/v1/{subscription=projects/*/subscriptions/*}:detach"
  119. };
  120. }
  121. }
  122. // A policy constraining the storage of messages published to the topic.
  123. message MessageStoragePolicy {
  124. // A list of IDs of GCP regions where messages that are published to the topic
  125. // may be persisted in storage. Messages published by publishers running in
  126. // non-allowed GCP regions (or running outside of GCP altogether) will be
  127. // routed for storage in one of the allowed regions. An empty list means that
  128. // no regions are allowed, and is not a valid configuration.
  129. repeated string allowed_persistence_regions = 1;
  130. }
  131. // Settings for validating messages published against a schema.
  132. message SchemaSettings {
  133. // Required. The name of the schema that messages published should be
  134. // validated against. Format is `projects/{project}/schemas/{schema}`. The
  135. // value of this field will be `_deleted-schema_` if the schema has been
  136. // deleted.
  137. string schema = 1 [
  138. (google.api.field_behavior) = REQUIRED,
  139. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" }
  140. ];
  141. // The encoding of messages validated against `schema`.
  142. Encoding encoding = 2;
  143. }
  144. // A topic resource.
  145. message Topic {
  146. option (google.api.resource) = {
  147. type: "pubsub.googleapis.com/Topic"
  148. pattern: "projects/{project}/topics/{topic}"
  149. pattern: "_deleted-topic_"
  150. };
  151. // Required. The name of the topic. It must have the format
  152. // `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
  153. // and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
  154. // underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
  155. // signs (`%`). It must be between 3 and 255 characters in length, and it
  156. // must not start with `"goog"`.
  157. string name = 1 [(google.api.field_behavior) = REQUIRED];
  158. // See [Creating and managing labels]
  159. // (https://cloud.google.com/pubsub/docs/labels).
  160. map<string, string> labels = 2;
  161. // Policy constraining the set of Google Cloud Platform regions where messages
  162. // published to the topic may be stored. If not present, then no constraints
  163. // are in effect.
  164. MessageStoragePolicy message_storage_policy = 3;
  165. // The resource name of the Cloud KMS CryptoKey to be used to protect access
  166. // to messages published on this topic.
  167. //
  168. // The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
  169. string kms_key_name = 5;
  170. // Settings for validating messages published against a schema.
  171. SchemaSettings schema_settings = 6;
  172. // Reserved for future use. This field is set only in responses from the
  173. // server; it is ignored if it is set in any requests.
  174. bool satisfies_pzs = 7;
  175. // Indicates the minimum duration to retain a message after it is published to
  176. // the topic. If this field is set, messages published to the topic in the
  177. // last `message_retention_duration` are always available to subscribers. For
  178. // instance, it allows any attached subscription to [seek to a
  179. // timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
  180. // that is up to `message_retention_duration` in the past. If this field is
  181. // not set, message retention is controlled by settings on individual
  182. // subscriptions. Cannot be more than 7 days or less than 10 minutes.
  183. google.protobuf.Duration message_retention_duration = 8;
  184. }
  185. // A message that is published by publishers and consumed by subscribers. The
  186. // message must contain either a non-empty data field or at least one attribute.
  187. // Note that client libraries represent this object differently
  188. // depending on the language. See the corresponding [client library
  189. // documentation](https://cloud.google.com/pubsub/docs/reference/libraries) for
  190. // more information. See [quotas and limits]
  191. // (https://cloud.google.com/pubsub/quotas) for more information about message
  192. // limits.
  193. message PubsubMessage {
  194. // The message data field. If this field is empty, the message must contain
  195. // at least one attribute.
  196. bytes data = 1;
  197. // Attributes for this message. If this field is empty, the message must
  198. // contain non-empty data. This can be used to filter messages on the
  199. // subscription.
  200. map<string, string> attributes = 2;
  201. // ID of this message, assigned by the server when the message is published.
  202. // Guaranteed to be unique within the topic. This value may be read by a
  203. // subscriber that receives a `PubsubMessage` via a `Pull` call or a push
  204. // delivery. It must not be populated by the publisher in a `Publish` call.
  205. string message_id = 3;
  206. // The time at which the message was published, populated by the server when
  207. // it receives the `Publish` call. It must not be populated by the
  208. // publisher in a `Publish` call.
  209. google.protobuf.Timestamp publish_time = 4;
  210. // If non-empty, identifies related messages for which publish order should be
  211. // respected. If a `Subscription` has `enable_message_ordering` set to `true`,
  212. // messages published with the same non-empty `ordering_key` value will be
  213. // delivered to subscribers in the order in which they are received by the
  214. // Pub/Sub system. All `PubsubMessage`s published in a given `PublishRequest`
  215. // must specify the same `ordering_key` value.
  216. string ordering_key = 5;
  217. }
  218. // Request for the GetTopic method.
  219. message GetTopicRequest {
  220. // Required. The name of the topic to get.
  221. // Format is `projects/{project}/topics/{topic}`.
  222. string topic = 1 [
  223. (google.api.field_behavior) = REQUIRED,
  224. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" }
  225. ];
  226. }
  227. // Request for the UpdateTopic method.
  228. message UpdateTopicRequest {
  229. // Required. The updated topic object.
  230. Topic topic = 1 [(google.api.field_behavior) = REQUIRED];
  231. // Required. Indicates which fields in the provided topic to update. Must be
  232. // specified and non-empty. Note that if `update_mask` contains
  233. // "message_storage_policy" but the `message_storage_policy` is not set in
  234. // the `topic` provided above, then the updated value is determined by the
  235. // policy configured at the project or organization level.
  236. google.protobuf.FieldMask update_mask = 2
  237. [(google.api.field_behavior) = REQUIRED];
  238. }
  239. // Request for the Publish method.
  240. message PublishRequest {
  241. // Required. The messages in the request will be published on this topic.
  242. // Format is `projects/{project}/topics/{topic}`.
  243. string topic = 1 [
  244. (google.api.field_behavior) = REQUIRED,
  245. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" }
  246. ];
  247. // Required. The messages to publish.
  248. repeated PubsubMessage messages = 2 [(google.api.field_behavior) = REQUIRED];
  249. }
  250. // Response for the `Publish` method.
  251. message PublishResponse {
  252. // The server-assigned ID of each published message, in the same order as
  253. // the messages in the request. IDs are guaranteed to be unique within
  254. // the topic.
  255. repeated string message_ids = 1;
  256. }
  257. // Request for the `ListTopics` method.
  258. message ListTopicsRequest {
  259. // Required. The name of the project in which to list topics.
  260. // Format is `projects/{project-id}`.
  261. string project = 1 [
  262. (google.api.field_behavior) = REQUIRED,
  263. (google.api.resource_reference) = {
  264. type: "cloudresourcemanager.googleapis.com/Project"
  265. }
  266. ];
  267. // Maximum number of topics to return.
  268. int32 page_size = 2;
  269. // The value returned by the last `ListTopicsResponse`; indicates that this is
  270. // a continuation of a prior `ListTopics` call, and that the system should
  271. // return the next page of data.
  272. string page_token = 3;
  273. }
  274. // Response for the `ListTopics` method.
  275. message ListTopicsResponse {
  276. // The resulting topics.
  277. repeated Topic topics = 1;
  278. // If not empty, indicates that there may be more topics that match the
  279. // request; this value should be passed in a new `ListTopicsRequest`.
  280. string next_page_token = 2;
  281. }
  282. // Request for the `ListTopicSubscriptions` method.
  283. message ListTopicSubscriptionsRequest {
  284. // Required. The name of the topic that subscriptions are attached to.
  285. // Format is `projects/{project}/topics/{topic}`.
  286. string topic = 1 [
  287. (google.api.field_behavior) = REQUIRED,
  288. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" }
  289. ];
  290. // Maximum number of subscription names to return.
  291. int32 page_size = 2;
  292. // The value returned by the last `ListTopicSubscriptionsResponse`; indicates
  293. // that this is a continuation of a prior `ListTopicSubscriptions` call, and
  294. // that the system should return the next page of data.
  295. string page_token = 3;
  296. }
  297. // Response for the `ListTopicSubscriptions` method.
  298. message ListTopicSubscriptionsResponse {
  299. // The names of subscriptions attached to the topic specified in the request.
  300. repeated string subscriptions = 1 [(google.api.resource_reference) = {
  301. type: "pubsub.googleapis.com/Subscription"
  302. }];
  303. // If not empty, indicates that there may be more subscriptions that match
  304. // the request; this value should be passed in a new
  305. // `ListTopicSubscriptionsRequest` to get more subscriptions.
  306. string next_page_token = 2;
  307. }
  308. // Request for the `ListTopicSnapshots` method.
  309. message ListTopicSnapshotsRequest {
  310. // Required. The name of the topic that snapshots are attached to.
  311. // Format is `projects/{project}/topics/{topic}`.
  312. string topic = 1 [
  313. (google.api.field_behavior) = REQUIRED,
  314. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" }
  315. ];
  316. // Maximum number of snapshot names to return.
  317. int32 page_size = 2;
  318. // The value returned by the last `ListTopicSnapshotsResponse`; indicates
  319. // that this is a continuation of a prior `ListTopicSnapshots` call, and
  320. // that the system should return the next page of data.
  321. string page_token = 3;
  322. }
  323. // Response for the `ListTopicSnapshots` method.
  324. message ListTopicSnapshotsResponse {
  325. // The names of the snapshots that match the request.
  326. repeated string snapshots = 1;
  327. // If not empty, indicates that there may be more snapshots that match
  328. // the request; this value should be passed in a new
  329. // `ListTopicSnapshotsRequest` to get more snapshots.
  330. string next_page_token = 2;
  331. }
  332. // Request for the `DeleteTopic` method.
  333. message DeleteTopicRequest {
  334. // Required. Name of the topic to delete.
  335. // Format is `projects/{project}/topics/{topic}`.
  336. string topic = 1 [
  337. (google.api.field_behavior) = REQUIRED,
  338. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" }
  339. ];
  340. }
  341. // Request for the DetachSubscription method.
  342. message DetachSubscriptionRequest {
  343. // Required. The subscription to detach.
  344. // Format is `projects/{project}/subscriptions/{subscription}`.
  345. string subscription = 1 [
  346. (google.api.field_behavior) = REQUIRED,
  347. (google.api.resource_reference) = {
  348. type: "pubsub.googleapis.com/Subscription"
  349. }
  350. ];
  351. }
  352. // Response for the DetachSubscription method.
  353. // Reserved for future use.
  354. message DetachSubscriptionResponse {}
  355. // The service that an application uses to manipulate subscriptions and to
  356. // consume messages from a subscription via the `Pull` method or by
  357. // establishing a bi-directional stream using the `StreamingPull` method.
  358. service Subscriber {
  359. option (google.api.default_host) = "pubsub.googleapis.com";
  360. option (google.api.oauth_scopes) =
  361. "https://www.googleapis.com/auth/cloud-platform,"
  362. "https://www.googleapis.com/auth/pubsub";
  363. // Creates a subscription to a given topic. See the [resource name rules]
  364. // (https://cloud.google.com/pubsub/docs/admin#resource_names).
  365. // If the subscription already exists, returns `ALREADY_EXISTS`.
  366. // If the corresponding topic doesn't exist, returns `NOT_FOUND`.
  367. //
  368. // If the name is not provided in the request, the server will assign a random
  369. // name for this subscription on the same project as the topic, conforming
  370. // to the [resource name format]
  371. // (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated
  372. // name is populated in the returned Subscription object. Note that for REST
  373. // API requests, you must specify a name in the request.
  374. rpc CreateSubscription(Subscription) returns (Subscription) {
  375. option (google.api.http) = {
  376. put: "/v1/{name=projects/*/subscriptions/*}"
  377. body: "*"
  378. };
  379. option (google.api.method_signature) =
  380. "name,topic,push_config,ack_deadline_seconds";
  381. }
  382. // Gets the configuration details of a subscription.
  383. rpc GetSubscription(GetSubscriptionRequest) returns (Subscription) {
  384. option (google.api.http) = {
  385. get: "/v1/{subscription=projects/*/subscriptions/*}"
  386. };
  387. option (google.api.method_signature) = "subscription";
  388. }
  389. // Updates an existing subscription. Note that certain properties of a
  390. // subscription, such as its topic, are not modifiable.
  391. rpc UpdateSubscription(UpdateSubscriptionRequest) returns (Subscription) {
  392. option (google.api.http) = {
  393. patch: "/v1/{subscription.name=projects/*/subscriptions/*}"
  394. body: "*"
  395. };
  396. }
  397. // Lists matching subscriptions.
  398. rpc ListSubscriptions(ListSubscriptionsRequest)
  399. returns (ListSubscriptionsResponse) {
  400. option (google.api.http) = {
  401. get: "/v1/{project=projects/*}/subscriptions"
  402. };
  403. option (google.api.method_signature) = "project";
  404. }
  405. // Deletes an existing subscription. All messages retained in the subscription
  406. // are immediately dropped. Calls to `Pull` after deletion will return
  407. // `NOT_FOUND`. After a subscription is deleted, a new one may be created with
  408. // the same name, but the new one has no association with the old
  409. // subscription or its topic unless the same topic is specified.
  410. rpc DeleteSubscription(DeleteSubscriptionRequest)
  411. returns (google.protobuf.Empty) {
  412. option (google.api.http) = {
  413. delete: "/v1/{subscription=projects/*/subscriptions/*}"
  414. };
  415. option (google.api.method_signature) = "subscription";
  416. }
  417. // Modifies the ack deadline for a specific message. This method is useful
  418. // to indicate that more time is needed to process a message by the
  419. // subscriber, or to make the message available for redelivery if the
  420. // processing was interrupted. Note that this does not modify the
  421. // subscription-level `ackDeadlineSeconds` used for subsequent messages.
  422. rpc ModifyAckDeadline(ModifyAckDeadlineRequest)
  423. returns (google.protobuf.Empty) {
  424. option (google.api.http) = {
  425. post: "/v1/{subscription=projects/*/subscriptions/*}:modifyAckDeadline"
  426. body: "*"
  427. };
  428. option (google.api.method_signature) =
  429. "subscription,ack_ids,ack_deadline_seconds";
  430. }
  431. // Acknowledges the messages associated with the `ack_ids` in the
  432. // `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages
  433. // from the subscription.
  434. //
  435. // Acknowledging a message whose ack deadline has expired may succeed,
  436. // but such a message may be redelivered later. Acknowledging a message more
  437. // than once will not result in an error.
  438. rpc Acknowledge(AcknowledgeRequest) returns (google.protobuf.Empty) {
  439. option (google.api.http) = {
  440. post: "/v1/{subscription=projects/*/subscriptions/*}:acknowledge"
  441. body: "*"
  442. };
  443. option (google.api.method_signature) = "subscription,ack_ids";
  444. }
  445. // Pulls messages from the server. The server may return `UNAVAILABLE` if
  446. // there are too many concurrent pull requests pending for the given
  447. // subscription.
  448. rpc Pull(PullRequest) returns (PullResponse) {
  449. option (google.api.http) = {
  450. post: "/v1/{subscription=projects/*/subscriptions/*}:pull"
  451. body: "*"
  452. };
  453. option (google.api.method_signature) =
  454. "subscription,return_immediately,max_messages";
  455. option (google.api.method_signature) = "subscription,max_messages";
  456. }
  457. // Establishes a stream with the server, which sends messages down to the
  458. // client. The client streams acknowledgements and ack deadline modifications
  459. // back to the server. The server will close the stream and return the status
  460. // on any error. The server may close the stream with status `UNAVAILABLE` to
  461. // reassign server-side resources, in which case, the client should
  462. // re-establish the stream. Flow control can be achieved by configuring the
  463. // underlying RPC channel.
  464. rpc StreamingPull(stream StreamingPullRequest)
  465. returns (stream StreamingPullResponse) {}
  466. // Modifies the `PushConfig` for a specified subscription.
  467. //
  468. // This may be used to change a push subscription to a pull one (signified by
  469. // an empty `PushConfig`) or vice versa, or change the endpoint URL and other
  470. // attributes of a push subscription. Messages will accumulate for delivery
  471. // continuously through the call regardless of changes to the `PushConfig`.
  472. rpc ModifyPushConfig(ModifyPushConfigRequest)
  473. returns (google.protobuf.Empty) {
  474. option (google.api.http) = {
  475. post: "/v1/{subscription=projects/*/subscriptions/*}:modifyPushConfig"
  476. body: "*"
  477. };
  478. option (google.api.method_signature) = "subscription,push_config";
  479. }
  480. // Gets the configuration details of a snapshot. Snapshots are used in
  481. // <a href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
  482. // operations, which allow you to manage message acknowledgments in bulk. That
  483. // is, you can set the acknowledgment state of messages in an existing
  484. // subscription to the state captured by a snapshot.
  485. rpc GetSnapshot(GetSnapshotRequest) returns (Snapshot) {
  486. option (google.api.http) = {
  487. get: "/v1/{snapshot=projects/*/snapshots/*}"
  488. };
  489. option (google.api.method_signature) = "snapshot";
  490. }
  491. // Lists the existing snapshots. Snapshots are used in [Seek](
  492. // https://cloud.google.com/pubsub/docs/replay-overview) operations, which
  493. // allow you to manage message acknowledgments in bulk. That is, you can set
  494. // the acknowledgment state of messages in an existing subscription to the
  495. // state captured by a snapshot.
  496. rpc ListSnapshots(ListSnapshotsRequest) returns (ListSnapshotsResponse) {
  497. option (google.api.http) = {
  498. get: "/v1/{project=projects/*}/snapshots"
  499. };
  500. option (google.api.method_signature) = "project";
  501. }
  502. // Creates a snapshot from the requested subscription. Snapshots are used in
  503. // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
  504. // which allow you to manage message acknowledgments in bulk. That is, you can
  505. // set the acknowledgment state of messages in an existing subscription to the
  506. // state captured by a snapshot.
  507. // If the snapshot already exists, returns `ALREADY_EXISTS`.
  508. // If the requested subscription doesn't exist, returns `NOT_FOUND`.
  509. // If the backlog in the subscription is too old -- and the resulting snapshot
  510. // would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.
  511. // See also the `Snapshot.expire_time` field. If the name is not provided in
  512. // the request, the server will assign a random
  513. // name for this snapshot on the same project as the subscription, conforming
  514. // to the [resource name format]
  515. // (https://cloud.google.com/pubsub/docs/admin#resource_names). The
  516. // generated name is populated in the returned Snapshot object. Note that for
  517. // REST API requests, you must specify a name in the request.
  518. rpc CreateSnapshot(CreateSnapshotRequest) returns (Snapshot) {
  519. option (google.api.http) = {
  520. put: "/v1/{name=projects/*/snapshots/*}"
  521. body: "*"
  522. };
  523. option (google.api.method_signature) = "name,subscription";
  524. }
  525. // Updates an existing snapshot. Snapshots are used in
  526. // <a href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
  527. // operations, which allow
  528. // you to manage message acknowledgments in bulk. That is, you can set the
  529. // acknowledgment state of messages in an existing subscription to the state
  530. // captured by a snapshot.
  531. rpc UpdateSnapshot(UpdateSnapshotRequest) returns (Snapshot) {
  532. option (google.api.http) = {
  533. patch: "/v1/{snapshot.name=projects/*/snapshots/*}"
  534. body: "*"
  535. };
  536. }
  537. // Removes an existing snapshot. Snapshots are used in [Seek]
  538. // (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
  539. // allow you to manage message acknowledgments in bulk. That is, you can set
  540. // the acknowledgment state of messages in an existing subscription to the
  541. // state captured by a snapshot.
  542. // When the snapshot is deleted, all messages retained in the snapshot
  543. // are immediately dropped. After a snapshot is deleted, a new one may be
  544. // created with the same name, but the new one has no association with the old
  545. // snapshot or its subscription, unless the same subscription is specified.
  546. rpc DeleteSnapshot(DeleteSnapshotRequest) returns (google.protobuf.Empty) {
  547. option (google.api.http) = {
  548. delete: "/v1/{snapshot=projects/*/snapshots/*}"
  549. };
  550. option (google.api.method_signature) = "snapshot";
  551. }
  552. // Seeks an existing subscription to a point in time or to a given snapshot,
  553. // whichever is provided in the request. Snapshots are used in [Seek]
  554. // (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
  555. // allow you to manage message acknowledgments in bulk. That is, you can set
  556. // the acknowledgment state of messages in an existing subscription to the
  557. // state captured by a snapshot. Note that both the subscription and the
  558. // snapshot must be on the same topic.
  559. rpc Seek(SeekRequest) returns (SeekResponse) {
  560. option (google.api.http) = {
  561. post: "/v1/{subscription=projects/*/subscriptions/*}:seek"
  562. body: "*"
  563. };
  564. }
  565. }
  566. // A subscription resource.
  567. message Subscription {
  568. option (google.api.resource) = {
  569. type: "pubsub.googleapis.com/Subscription"
  570. pattern: "projects/{project}/subscriptions/{subscription}"
  571. };
  572. // Possible states for a subscription.
  573. enum State {
  574. // Default value. This value is unused.
  575. STATE_UNSPECIFIED = 0;
  576. // The subscription can actively receive messages
  577. ACTIVE = 1;
  578. // The subscription cannot receive messages because of an error with the
  579. // resource to which it pushes messages. See the more detailed error state
  580. // in the corresponding configuration.
  581. RESOURCE_ERROR = 2;
  582. }
  583. // Required. The name of the subscription. It must have the format
  584. // `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
  585. // start with a letter, and contain only letters (`[A-Za-z]`), numbers
  586. // (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
  587. // plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
  588. // in length, and it must not start with `"goog"`.
  589. string name = 1 [(google.api.field_behavior) = REQUIRED];
  590. // Required. The name of the topic from which this subscription is receiving
  591. // messages. Format is `projects/{project}/topics/{topic}`. The value of this
  592. // field will be `_deleted-topic_` if the topic has been deleted.
  593. string topic = 2 [
  594. (google.api.field_behavior) = REQUIRED,
  595. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" }
  596. ];
  597. // If push delivery is used with this subscription, this field is
  598. // used to configure it. Either `pushConfig` or `bigQueryConfig` can be set,
  599. // but not both. If both are empty, then the subscriber will pull and ack
  600. // messages using API methods.
  601. PushConfig push_config = 4;
  602. // If delivery to BigQuery is used with this subscription, this field is
  603. // used to configure it. Either `pushConfig` or `bigQueryConfig` can be set,
  604. // but not both. If both are empty, then the subscriber will pull and ack
  605. // messages using API methods.
  606. BigQueryConfig bigquery_config = 18;
  607. // The approximate amount of time (on a best-effort basis) Pub/Sub waits for
  608. // the subscriber to acknowledge receipt before resending the message. In the
  609. // interval after the message is delivered and before it is acknowledged, it
  610. // is considered to be <i>outstanding</i>. During that time period, the
  611. // message will not be redelivered (on a best-effort basis).
  612. //
  613. // For pull subscriptions, this value is used as the initial value for the ack
  614. // deadline. To override this value for a given message, call
  615. // `ModifyAckDeadline` with the corresponding `ack_id` if using
  616. // non-streaming pull or send the `ack_id` in a
  617. // `StreamingModifyAckDeadlineRequest` if using streaming pull.
  618. // The minimum custom deadline you can specify is 10 seconds.
  619. // The maximum custom deadline you can specify is 600 seconds (10 minutes).
  620. // If this parameter is 0, a default value of 10 seconds is used.
  621. //
  622. // For push delivery, this value is also used to set the request timeout for
  623. // the call to the push endpoint.
  624. //
  625. // If the subscriber never acknowledges the message, the Pub/Sub
  626. // system will eventually redeliver the message.
  627. int32 ack_deadline_seconds = 5;
  628. // Indicates whether to retain acknowledged messages. If true, then
  629. // messages are not expunged from the subscription's backlog, even if they are
  630. // acknowledged, until they fall out of the `message_retention_duration`
  631. // window. This must be true if you would like to [`Seek` to a timestamp]
  632. // (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) in
  633. // the past to replay previously-acknowledged messages.
  634. bool retain_acked_messages = 7;
  635. // How long to retain unacknowledged messages in the subscription's backlog,
  636. // from the moment a message is published.
  637. // If `retain_acked_messages` is true, then this also configures the retention
  638. // of acknowledged messages, and thus configures how far back in time a `Seek`
  639. // can be done. Defaults to 7 days. Cannot be more than 7 days or less than 10
  640. // minutes.
  641. google.protobuf.Duration message_retention_duration = 8;
  642. // See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
  643. // managing labels</a>.
  644. map<string, string> labels = 9;
  645. // If true, messages published with the same `ordering_key` in `PubsubMessage`
  646. // will be delivered to the subscribers in the order in which they
  647. // are received by the Pub/Sub system. Otherwise, they may be delivered in
  648. // any order.
  649. bool enable_message_ordering = 10;
  650. // A policy that specifies the conditions for this subscription's expiration.
  651. // A subscription is considered active as long as any connected subscriber is
  652. // successfully consuming messages from the subscription or is issuing
  653. // operations on the subscription. If `expiration_policy` is not set, a
  654. // *default policy* with `ttl` of 31 days will be used. The minimum allowed
  655. // value for `expiration_policy.ttl` is 1 day.
  656. ExpirationPolicy expiration_policy = 11;
  657. // An expression written in the Pub/Sub [filter
  658. // language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
  659. // then only `PubsubMessage`s whose `attributes` field matches the filter are
  660. // delivered on this subscription. If empty, then no messages are filtered
  661. // out.
  662. string filter = 12;
  663. // A policy that specifies the conditions for dead lettering messages in
  664. // this subscription. If dead_letter_policy is not set, dead lettering
  665. // is disabled.
  666. //
  667. // The Cloud Pub/Sub service account associated with this subscriptions's
  668. // parent project (i.e.,
  669. // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
  670. // permission to Acknowledge() messages on this subscription.
  671. DeadLetterPolicy dead_letter_policy = 13;
  672. // A policy that specifies how Pub/Sub retries message delivery for this
  673. // subscription.
  674. //
  675. // If not set, the default retry policy is applied. This generally implies
  676. // that messages will be retried as soon as possible for healthy subscribers.
  677. // RetryPolicy will be triggered on NACKs or acknowledgement deadline
  678. // exceeded events for a given message.
  679. RetryPolicy retry_policy = 14;
  680. // Indicates whether the subscription is detached from its topic. Detached
  681. // subscriptions don't receive messages from their topic and don't retain any
  682. // backlog. `Pull` and `StreamingPull` requests will return
  683. // FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
  684. // the endpoint will not be made.
  685. bool detached = 15;
  686. // If true, Pub/Sub provides the following guarantees for the delivery of
  687. // a message with a given value of `message_id` on this subscription:
  688. //
  689. // * The message sent to a subscriber is guaranteed not to be resent
  690. // before the message's acknowledgement deadline expires.
  691. // * An acknowledged message will not be resent to a subscriber.
  692. //
  693. // Note that subscribers may still receive multiple copies of a message
  694. // when `enable_exactly_once_delivery` is true if the message was published
  695. // multiple times by a publisher client. These copies are considered distinct
  696. // by Pub/Sub and have distinct `message_id` values.
  697. bool enable_exactly_once_delivery = 16;
  698. // Output only. Indicates the minimum duration for which a message is retained
  699. // after it is published to the subscription's topic. If this field is set,
  700. // messages published to the subscription's topic in the last
  701. // `topic_message_retention_duration` are always available to subscribers. See
  702. // the `message_retention_duration` field in `Topic`. This field is set only
  703. // in responses from the server; it is ignored if it is set in any requests.
  704. google.protobuf.Duration topic_message_retention_duration = 17
  705. [(google.api.field_behavior) = OUTPUT_ONLY];
  706. // Output only. An output-only field indicating whether or not the subscription can receive
  707. // messages.
  708. State state = 19 [(google.api.field_behavior) = OUTPUT_ONLY];
  709. }
  710. // A policy that specifies how Cloud Pub/Sub retries message delivery.
  711. //
  712. // Retry delay will be exponential based on provided minimum and maximum
  713. // backoffs. https://en.wikipedia.org/wiki/Exponential_backoff.
  714. //
  715. // RetryPolicy will be triggered on NACKs or acknowledgement deadline exceeded
  716. // events for a given message.
  717. //
  718. // Retry Policy is implemented on a best effort basis. At times, the delay
  719. // between consecutive deliveries may not match the configuration. That is,
  720. // delay can be more or less than configured backoff.
  721. message RetryPolicy {
  722. // The minimum delay between consecutive deliveries of a given message.
  723. // Value should be between 0 and 600 seconds. Defaults to 10 seconds.
  724. google.protobuf.Duration minimum_backoff = 1;
  725. // The maximum delay between consecutive deliveries of a given message.
  726. // Value should be between 0 and 600 seconds. Defaults to 600 seconds.
  727. google.protobuf.Duration maximum_backoff = 2;
  728. }
  729. // Dead lettering is done on a best effort basis. The same message might be
  730. // dead lettered multiple times.
  731. //
  732. // If validation on any of the fields fails at subscription creation/updation,
  733. // the create/update subscription request will fail.
  734. message DeadLetterPolicy {
  735. // The name of the topic to which dead letter messages should be published.
  736. // Format is `projects/{project}/topics/{topic}`.The Cloud Pub/Sub service
  737. // account associated with the enclosing subscription's parent project (i.e.,
  738. // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
  739. // permission to Publish() to this topic.
  740. //
  741. // The operation will fail if the topic does not exist.
  742. // Users should ensure that there is a subscription attached to this topic
  743. // since messages published to a topic with no subscriptions are lost.
  744. string dead_letter_topic = 1;
  745. // The maximum number of delivery attempts for any message. The value must be
  746. // between 5 and 100.
  747. //
  748. // The number of delivery attempts is defined as 1 + (the sum of number of
  749. // NACKs and number of times the acknowledgement deadline has been exceeded
  750. // for the message).
  751. //
  752. // A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that
  753. // client libraries may automatically extend ack_deadlines.
  754. //
  755. // This field will be honored on a best effort basis.
  756. //
  757. // If this parameter is 0, a default value of 5 is used.
  758. int32 max_delivery_attempts = 2;
  759. }
  760. // A policy that specifies the conditions for resource expiration (i.e.,
  761. // automatic resource deletion).
  762. message ExpirationPolicy {
  763. // Specifies the "time-to-live" duration for an associated resource. The
  764. // resource expires if it is not active for a period of `ttl`. The definition
  765. // of "activity" depends on the type of the associated resource. The minimum
  766. // and maximum allowed values for `ttl` depend on the type of the associated
  767. // resource, as well. If `ttl` is not set, the associated resource never
  768. // expires.
  769. google.protobuf.Duration ttl = 1;
  770. }
  771. // Configuration for a push delivery endpoint.
  772. message PushConfig {
  773. // Contains information needed for generating an
  774. // [OpenID Connect
  775. // token](https://developers.google.com/identity/protocols/OpenIDConnect).
  776. message OidcToken {
  777. // [Service account
  778. // email](https://cloud.google.com/iam/docs/service-accounts)
  779. // to be used for generating the OIDC token. The caller (for
  780. // CreateSubscription, UpdateSubscription, and ModifyPushConfig RPCs) must
  781. // have the iam.serviceAccounts.actAs permission for the service account.
  782. string service_account_email = 1;
  783. // Audience to be used when generating OIDC token. The audience claim
  784. // identifies the recipients that the JWT is intended for. The audience
  785. // value is a single case-sensitive string. Having multiple values (array)
  786. // for the audience field is not supported. More info about the OIDC JWT
  787. // token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3
  788. // Note: if not specified, the Push endpoint URL will be used.
  789. string audience = 2;
  790. }
  791. // A URL locating the endpoint to which messages should be pushed.
  792. // For example, a Webhook endpoint might use `https://example.com/push`.
  793. string push_endpoint = 1;
  794. // Endpoint configuration attributes that can be used to control different
  795. // aspects of the message delivery.
  796. //
  797. // The only currently supported attribute is `x-goog-version`, which you can
  798. // use to change the format of the pushed message. This attribute
  799. // indicates the version of the data expected by the endpoint. This
  800. // controls the shape of the pushed message (i.e., its fields and metadata).
  801. //
  802. // If not present during the `CreateSubscription` call, it will default to
  803. // the version of the Pub/Sub API used to make such call. If not present in a
  804. // `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
  805. // calls will always return a valid version, even if the subscription was
  806. // created without this attribute.
  807. //
  808. // The only supported values for the `x-goog-version` attribute are:
  809. //
  810. // * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
  811. // * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
  812. //
  813. // For example:
  814. // <pre><code>attributes { "x-goog-version": "v1" } </code></pre>
  815. map<string, string> attributes = 2;
  816. // An authentication method used by push endpoints to verify the source of
  817. // push requests. This can be used with push endpoints that are private by
  818. // default to allow requests only from the Cloud Pub/Sub system, for example.
  819. // This field is optional and should be set only by users interested in
  820. // authenticated push.
  821. oneof authentication_method {
  822. // If specified, Pub/Sub will generate and attach an OIDC JWT token as an
  823. // `Authorization` header in the HTTP request for every pushed message.
  824. OidcToken oidc_token = 3;
  825. }
  826. }
  827. // Configuration for a BigQuery subscription.
  828. message BigQueryConfig {
  829. // Possible states for a BigQuery subscription.
  830. enum State {
  831. // Default value. This value is unused.
  832. STATE_UNSPECIFIED = 0;
  833. // The subscription can actively send messages to BigQuery
  834. ACTIVE = 1;
  835. // Cannot write to the BigQuery table because of permission denied errors.
  836. PERMISSION_DENIED = 2;
  837. // Cannot write to the BigQuery table because it does not exist.
  838. NOT_FOUND = 3;
  839. // Cannot write to the BigQuery table due to a schema mismatch.
  840. SCHEMA_MISMATCH = 4;
  841. }
  842. // The name of the table to which to write data, of the form
  843. // {projectId}:{datasetId}.{tableId}
  844. string table = 1;
  845. // When true, use the topic's schema as the columns to write to in BigQuery,
  846. // if it exists.
  847. bool use_topic_schema = 2;
  848. // When true, write the subscription name, message_id, publish_time,
  849. // attributes, and ordering_key to additional columns in the table. The
  850. // subscription name, message_id, and publish_time fields are put in their own
  851. // columns while all other message properties (other than data) are written to
  852. // a JSON object in the attributes column.
  853. bool write_metadata = 3;
  854. // When true and use_topic_schema is true, any fields that are a part of the
  855. // topic schema that are not part of the BigQuery table schema are dropped
  856. // when writing to BigQuery. Otherwise, the schemas must be kept in sync and
  857. // any messages with extra fields are not written and remain in the
  858. // subscription's backlog.
  859. bool drop_unknown_fields = 4;
  860. // Output only. An output-only field that indicates whether or not the subscription can
  861. // receive messages.
  862. State state = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
  863. }
  864. // A message and its corresponding acknowledgment ID.
  865. message ReceivedMessage {
  866. // This ID can be used to acknowledge the received message.
  867. string ack_id = 1;
  868. // The message.
  869. PubsubMessage message = 2;
  870. // The approximate number of times that Cloud Pub/Sub has attempted to deliver
  871. // the associated message to a subscriber.
  872. //
  873. // More precisely, this is 1 + (number of NACKs) +
  874. // (number of ack_deadline exceeds) for this message.
  875. //
  876. // A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
  877. // exceeds event is whenever a message is not acknowledged within
  878. // ack_deadline. Note that ack_deadline is initially
  879. // Subscription.ackDeadlineSeconds, but may get extended automatically by
  880. // the client library.
  881. //
  882. // Upon the first delivery of a given message, `delivery_attempt` will have a
  883. // value of 1. The value is calculated at best effort and is approximate.
  884. //
  885. // If a DeadLetterPolicy is not set on the subscription, this will be 0.
  886. int32 delivery_attempt = 3;
  887. }
  888. // Request for the GetSubscription method.
  889. message GetSubscriptionRequest {
  890. // Required. The name of the subscription to get.
  891. // Format is `projects/{project}/subscriptions/{sub}`.
  892. string subscription = 1 [
  893. (google.api.field_behavior) = REQUIRED,
  894. (google.api.resource_reference) = {
  895. type: "pubsub.googleapis.com/Subscription"
  896. }
  897. ];
  898. }
  899. // Request for the UpdateSubscription method.
  900. message UpdateSubscriptionRequest {
  901. // Required. The updated subscription object.
  902. Subscription subscription = 1 [(google.api.field_behavior) = REQUIRED];
  903. // Required. Indicates which fields in the provided subscription to update.
  904. // Must be specified and non-empty.
  905. google.protobuf.FieldMask update_mask = 2
  906. [(google.api.field_behavior) = REQUIRED];
  907. }
  908. // Request for the `ListSubscriptions` method.
  909. message ListSubscriptionsRequest {
  910. // Required. The name of the project in which to list subscriptions.
  911. // Format is `projects/{project-id}`.
  912. string project = 1 [
  913. (google.api.field_behavior) = REQUIRED,
  914. (google.api.resource_reference) = {
  915. type: "cloudresourcemanager.googleapis.com/Project"
  916. }
  917. ];
  918. // Maximum number of subscriptions to return.
  919. int32 page_size = 2;
  920. // The value returned by the last `ListSubscriptionsResponse`; indicates that
  921. // this is a continuation of a prior `ListSubscriptions` call, and that the
  922. // system should return the next page of data.
  923. string page_token = 3;
  924. }
  925. // Response for the `ListSubscriptions` method.
  926. message ListSubscriptionsResponse {
  927. // The subscriptions that match the request.
  928. repeated Subscription subscriptions = 1;
  929. // If not empty, indicates that there may be more subscriptions that match
  930. // the request; this value should be passed in a new
  931. // `ListSubscriptionsRequest` to get more subscriptions.
  932. string next_page_token = 2;
  933. }
  934. // Request for the DeleteSubscription method.
  935. message DeleteSubscriptionRequest {
  936. // Required. The subscription to delete.
  937. // Format is `projects/{project}/subscriptions/{sub}`.
  938. string subscription = 1 [
  939. (google.api.field_behavior) = REQUIRED,
  940. (google.api.resource_reference) = {
  941. type: "pubsub.googleapis.com/Subscription"
  942. }
  943. ];
  944. }
  945. // Request for the ModifyPushConfig method.
  946. message ModifyPushConfigRequest {
  947. // Required. The name of the subscription.
  948. // Format is `projects/{project}/subscriptions/{sub}`.
  949. string subscription = 1 [
  950. (google.api.field_behavior) = REQUIRED,
  951. (google.api.resource_reference) = {
  952. type: "pubsub.googleapis.com/Subscription"
  953. }
  954. ];
  955. // Required. The push configuration for future deliveries.
  956. //
  957. // An empty `pushConfig` indicates that the Pub/Sub system should
  958. // stop pushing messages from the given subscription and allow
  959. // messages to be pulled and acknowledged - effectively pausing
  960. // the subscription if `Pull` or `StreamingPull` is not called.
  961. PushConfig push_config = 2 [(google.api.field_behavior) = REQUIRED];
  962. }
  963. // Request for the `Pull` method.
  964. message PullRequest {
  965. // Required. The subscription from which messages should be pulled.
  966. // Format is `projects/{project}/subscriptions/{sub}`.
  967. string subscription = 1 [
  968. (google.api.field_behavior) = REQUIRED,
  969. (google.api.resource_reference) = {
  970. type: "pubsub.googleapis.com/Subscription"
  971. }
  972. ];
  973. // Optional. If this field set to true, the system will respond immediately
  974. // even if it there are no messages available to return in the `Pull`
  975. // response. Otherwise, the system may wait (for a bounded amount of time)
  976. // until at least one message is available, rather than returning no messages.
  977. // Warning: setting this field to `true` is discouraged because it adversely
  978. // impacts the performance of `Pull` operations. We recommend that users do
  979. // not set this field.
  980. bool return_immediately = 2
  981. [deprecated = true, (google.api.field_behavior) = OPTIONAL];
  982. // Required. The maximum number of messages to return for this request. Must
  983. // be a positive integer. The Pub/Sub system may return fewer than the number
  984. // specified.
  985. int32 max_messages = 3 [(google.api.field_behavior) = REQUIRED];
  986. }
  987. // Response for the `Pull` method.
  988. message PullResponse {
  989. // Received Pub/Sub messages. The list will be empty if there are no more
  990. // messages available in the backlog. For JSON, the response can be entirely
  991. // empty. The Pub/Sub system may return fewer than the `maxMessages` requested
  992. // even if there are more messages available in the backlog.
  993. repeated ReceivedMessage received_messages = 1;
  994. }
  995. // Request for the ModifyAckDeadline method.
  996. message ModifyAckDeadlineRequest {
  997. // Required. The name of the subscription.
  998. // Format is `projects/{project}/subscriptions/{sub}`.
  999. string subscription = 1 [
  1000. (google.api.field_behavior) = REQUIRED,
  1001. (google.api.resource_reference) = {
  1002. type: "pubsub.googleapis.com/Subscription"
  1003. }
  1004. ];
  1005. // Required. List of acknowledgment IDs.
  1006. repeated string ack_ids = 4 [(google.api.field_behavior) = REQUIRED];
  1007. // Required. The new ack deadline with respect to the time this request was
  1008. // sent to the Pub/Sub system. For example, if the value is 10, the new ack
  1009. // deadline will expire 10 seconds after the `ModifyAckDeadline` call was
  1010. // made. Specifying zero might immediately make the message available for
  1011. // delivery to another subscriber client. This typically results in an
  1012. // increase in the rate of message redeliveries (that is, duplicates).
  1013. // The minimum deadline you can specify is 0 seconds.
  1014. // The maximum deadline you can specify is 600 seconds (10 minutes).
  1015. int32 ack_deadline_seconds = 3 [(google.api.field_behavior) = REQUIRED];
  1016. }
  1017. // Request for the Acknowledge method.
  1018. message AcknowledgeRequest {
  1019. // Required. The subscription whose message is being acknowledged.
  1020. // Format is `projects/{project}/subscriptions/{sub}`.
  1021. string subscription = 1 [
  1022. (google.api.field_behavior) = REQUIRED,
  1023. (google.api.resource_reference) = {
  1024. type: "pubsub.googleapis.com/Subscription"
  1025. }
  1026. ];
  1027. // Required. The acknowledgment ID for the messages being acknowledged that
  1028. // was returned by the Pub/Sub system in the `Pull` response. Must not be
  1029. // empty.
  1030. repeated string ack_ids = 2 [(google.api.field_behavior) = REQUIRED];
  1031. }
  1032. // Request for the `StreamingPull` streaming RPC method. This request is used to
  1033. // establish the initial stream as well as to stream acknowledgements and ack
  1034. // deadline modifications from the client to the server.
  1035. message StreamingPullRequest {
  1036. // Required. The subscription for which to initialize the new stream. This
  1037. // must be provided in the first request on the stream, and must not be set in
  1038. // subsequent requests from client to server.
  1039. // Format is `projects/{project}/subscriptions/{sub}`.
  1040. string subscription = 1 [
  1041. (google.api.field_behavior) = REQUIRED,
  1042. (google.api.resource_reference) = {
  1043. type: "pubsub.googleapis.com/Subscription"
  1044. }
  1045. ];
  1046. // List of acknowledgement IDs for acknowledging previously received messages
  1047. // (received on this stream or a different stream). If an ack ID has expired,
  1048. // the corresponding message may be redelivered later. Acknowledging a message
  1049. // more than once will not result in an error. If the acknowledgement ID is
  1050. // malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
  1051. repeated string ack_ids = 2;
  1052. // The list of new ack deadlines for the IDs listed in
  1053. // `modify_deadline_ack_ids`. The size of this list must be the same as the
  1054. // size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
  1055. // with `INVALID_ARGUMENT`. Each element in this list is applied to the
  1056. // element in the same position in `modify_deadline_ack_ids`. The new ack
  1057. // deadline is with respect to the time this request was sent to the Pub/Sub
  1058. // system. Must be >= 0. For example, if the value is 10, the new ack deadline
  1059. // will expire 10 seconds after this request is received. If the value is 0,
  1060. // the message is immediately made available for another streaming or
  1061. // non-streaming pull request. If the value is < 0 (an error), the stream will
  1062. // be aborted with status `INVALID_ARGUMENT`.
  1063. repeated int32 modify_deadline_seconds = 3;
  1064. // List of acknowledgement IDs whose deadline will be modified based on the
  1065. // corresponding element in `modify_deadline_seconds`. This field can be used
  1066. // to indicate that more time is needed to process a message by the
  1067. // subscriber, or to make the message available for redelivery if the
  1068. // processing was interrupted.
  1069. repeated string modify_deadline_ack_ids = 4;
  1070. // Required. The ack deadline to use for the stream. This must be provided in
  1071. // the first request on the stream, but it can also be updated on subsequent
  1072. // requests from client to server. The minimum deadline you can specify is 10
  1073. // seconds. The maximum deadline you can specify is 600 seconds (10 minutes).
  1074. int32 stream_ack_deadline_seconds = 5
  1075. [(google.api.field_behavior) = REQUIRED];
  1076. // A unique identifier that is used to distinguish client instances from each
  1077. // other. Only needs to be provided on the initial request. When a stream
  1078. // disconnects and reconnects for the same stream, the client_id should be set
  1079. // to the same value so that state associated with the old stream can be
  1080. // transferred to the new stream. The same client_id should not be used for
  1081. // different client instances.
  1082. string client_id = 6;
  1083. // Flow control settings for the maximum number of outstanding messages. When
  1084. // there are `max_outstanding_messages` or more currently sent to the
  1085. // streaming pull client that have not yet been acked or nacked, the server
  1086. // stops sending more messages. The sending of messages resumes once the
  1087. // number of outstanding messages is less than this value. If the value is
  1088. // <= 0, there is no limit to the number of outstanding messages. This
  1089. // property can only be set on the initial StreamingPullRequest. If it is set
  1090. // on a subsequent request, the stream will be aborted with status
  1091. // `INVALID_ARGUMENT`.
  1092. int64 max_outstanding_messages = 7;
  1093. // Flow control settings for the maximum number of outstanding bytes. When
  1094. // there are `max_outstanding_bytes` or more worth of messages currently sent
  1095. // to the streaming pull client that have not yet been acked or nacked, the
  1096. // server will stop sending more messages. The sending of messages resumes
  1097. // once the number of outstanding bytes is less than this value. If the value
  1098. // is <= 0, there is no limit to the number of outstanding bytes. This
  1099. // property can only be set on the initial StreamingPullRequest. If it is set
  1100. // on a subsequent request, the stream will be aborted with status
  1101. // `INVALID_ARGUMENT`.
  1102. int64 max_outstanding_bytes = 8;
  1103. }
  1104. // Response for the `StreamingPull` method. This response is used to stream
  1105. // messages from the server to the client.
  1106. message StreamingPullResponse {
  1107. // Acknowledgement IDs sent in one or more previous requests to acknowledge a
  1108. // previously received message.
  1109. message AcknowledgeConfirmation {
  1110. // Successfully processed acknowledgement IDs.
  1111. repeated string ack_ids = 1 [ctype = CORD];
  1112. // List of acknowledgement IDs that were malformed or whose acknowledgement
  1113. // deadline has expired.
  1114. repeated string invalid_ack_ids = 2 [ctype = CORD];
  1115. // List of acknowledgement IDs that were out of order.
  1116. repeated string unordered_ack_ids = 3 [ctype = CORD];
  1117. }
  1118. // Acknowledgement IDs sent in one or more previous requests to modify the
  1119. // deadline for a specific message.
  1120. message ModifyAckDeadlineConfirmation {
  1121. // Successfully processed acknowledgement IDs.
  1122. repeated string ack_ids = 1 [ctype = CORD];
  1123. // List of acknowledgement IDs that were malformed or whose acknowledgement
  1124. // deadline has expired.
  1125. repeated string invalid_ack_ids = 2 [ctype = CORD];
  1126. }
  1127. // Subscription properties sent as part of the response.
  1128. message SubscriptionProperties {
  1129. // True iff exactly once delivery is enabled for this subscription.
  1130. bool exactly_once_delivery_enabled = 1;
  1131. // True iff message ordering is enabled for this subscription.
  1132. bool message_ordering_enabled = 2;
  1133. }
  1134. // Received Pub/Sub messages. This will not be empty.
  1135. repeated ReceivedMessage received_messages = 1;
  1136. reserved 2;
  1137. // This field will only be set if `enable_exactly_once_delivery` is set to
  1138. // `true`.
  1139. AcknowledgeConfirmation acknowledge_confirmation = 5;
  1140. // This field will only be set if `enable_exactly_once_delivery` is set to
  1141. // `true`.
  1142. ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3;
  1143. // Properties associated with this subscription.
  1144. SubscriptionProperties subscription_properties = 4;
  1145. }
  1146. // Request for the `CreateSnapshot` method.
  1147. message CreateSnapshotRequest {
  1148. // Required. User-provided name for this snapshot. If the name is not provided
  1149. // in the request, the server will assign a random name for this snapshot on
  1150. // the same project as the subscription. Note that for REST API requests, you
  1151. // must specify a name. See the <a
  1152. // href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource
  1153. // name rules</a>. Format is `projects/{project}/snapshots/{snap}`.
  1154. string name = 1 [
  1155. (google.api.field_behavior) = REQUIRED,
  1156. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" }
  1157. ];
  1158. // Required. The subscription whose backlog the snapshot retains.
  1159. // Specifically, the created snapshot is guaranteed to retain:
  1160. // (a) The existing backlog on the subscription. More precisely, this is
  1161. // defined as the messages in the subscription's backlog that are
  1162. // unacknowledged upon the successful completion of the
  1163. // `CreateSnapshot` request; as well as:
  1164. // (b) Any messages published to the subscription's topic following the
  1165. // successful completion of the CreateSnapshot request.
  1166. // Format is `projects/{project}/subscriptions/{sub}`.
  1167. string subscription = 2 [
  1168. (google.api.field_behavior) = REQUIRED,
  1169. (google.api.resource_reference) = {
  1170. type: "pubsub.googleapis.com/Subscription"
  1171. }
  1172. ];
  1173. // See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
  1174. // managing labels</a>.
  1175. map<string, string> labels = 3;
  1176. }
  1177. // Request for the UpdateSnapshot method.
  1178. message UpdateSnapshotRequest {
  1179. // Required. The updated snapshot object.
  1180. Snapshot snapshot = 1 [(google.api.field_behavior) = REQUIRED];
  1181. // Required. Indicates which fields in the provided snapshot to update.
  1182. // Must be specified and non-empty.
  1183. google.protobuf.FieldMask update_mask = 2
  1184. [(google.api.field_behavior) = REQUIRED];
  1185. }
  1186. // A snapshot resource. Snapshots are used in
  1187. // [Seek](https://cloud.google.com/pubsub/docs/replay-overview)
  1188. // operations, which allow you to manage message acknowledgments in bulk. That
  1189. // is, you can set the acknowledgment state of messages in an existing
  1190. // subscription to the state captured by a snapshot.
  1191. message Snapshot {
  1192. option (google.api.resource) = {
  1193. type: "pubsub.googleapis.com/Snapshot"
  1194. pattern: "projects/{project}/snapshots/{snapshot}"
  1195. };
  1196. // The name of the snapshot.
  1197. string name = 1;
  1198. // The name of the topic from which this snapshot is retaining messages.
  1199. string topic = 2 [
  1200. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" }
  1201. ];
  1202. // The snapshot is guaranteed to exist up until this time.
  1203. // A newly-created snapshot expires no later than 7 days from the time of its
  1204. // creation. Its exact lifetime is determined at creation by the existing
  1205. // backlog in the source subscription. Specifically, the lifetime of the
  1206. // snapshot is `7 days - (age of oldest unacked message in the subscription)`.
  1207. // For example, consider a subscription whose oldest unacked message is 3 days
  1208. // old. If a snapshot is created from this subscription, the snapshot -- which
  1209. // will always capture this 3-day-old backlog as long as the snapshot
  1210. // exists -- will expire in 4 days. The service will refuse to create a
  1211. // snapshot that would expire in less than 1 hour after creation.
  1212. google.protobuf.Timestamp expire_time = 3;
  1213. // See [Creating and managing labels]
  1214. // (https://cloud.google.com/pubsub/docs/labels).
  1215. map<string, string> labels = 4;
  1216. }
  1217. // Request for the GetSnapshot method.
  1218. message GetSnapshotRequest {
  1219. // Required. The name of the snapshot to get.
  1220. // Format is `projects/{project}/snapshots/{snap}`.
  1221. string snapshot = 1 [
  1222. (google.api.field_behavior) = REQUIRED,
  1223. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" }
  1224. ];
  1225. }
  1226. // Request for the `ListSnapshots` method.
  1227. message ListSnapshotsRequest {
  1228. // Required. The name of the project in which to list snapshots.
  1229. // Format is `projects/{project-id}`.
  1230. string project = 1 [
  1231. (google.api.field_behavior) = REQUIRED,
  1232. (google.api.resource_reference) = {
  1233. type: "cloudresourcemanager.googleapis.com/Project"
  1234. }
  1235. ];
  1236. // Maximum number of snapshots to return.
  1237. int32 page_size = 2;
  1238. // The value returned by the last `ListSnapshotsResponse`; indicates that this
  1239. // is a continuation of a prior `ListSnapshots` call, and that the system
  1240. // should return the next page of data.
  1241. string page_token = 3;
  1242. }
  1243. // Response for the `ListSnapshots` method.
  1244. message ListSnapshotsResponse {
  1245. // The resulting snapshots.
  1246. repeated Snapshot snapshots = 1;
  1247. // If not empty, indicates that there may be more snapshot that match the
  1248. // request; this value should be passed in a new `ListSnapshotsRequest`.
  1249. string next_page_token = 2;
  1250. }
  1251. // Request for the `DeleteSnapshot` method.
  1252. message DeleteSnapshotRequest {
  1253. // Required. The name of the snapshot to delete.
  1254. // Format is `projects/{project}/snapshots/{snap}`.
  1255. string snapshot = 1 [
  1256. (google.api.field_behavior) = REQUIRED,
  1257. (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" }
  1258. ];
  1259. }
  1260. // Request for the `Seek` method.
  1261. message SeekRequest {
  1262. // Required. The subscription to affect.
  1263. string subscription = 1 [
  1264. (google.api.field_behavior) = REQUIRED,
  1265. (google.api.resource_reference) = {
  1266. type: "pubsub.googleapis.com/Subscription"
  1267. }
  1268. ];
  1269. oneof target {
  1270. // The time to seek to.
  1271. // Messages retained in the subscription that were published before this
  1272. // time are marked as acknowledged, and messages retained in the
  1273. // subscription that were published after this time are marked as
  1274. // unacknowledged. Note that this operation affects only those messages
  1275. // retained in the subscription (configured by the combination of
  1276. // `message_retention_duration` and `retain_acked_messages`). For example,
  1277. // if `time` corresponds to a point before the message retention
  1278. // window (or to a point before the system's notion of the subscription
  1279. // creation time), only retained messages will be marked as unacknowledged,
  1280. // and already-expunged messages will not be restored.
  1281. google.protobuf.Timestamp time = 2;
  1282. // The snapshot to seek to. The snapshot's topic must be the same as that of
  1283. // the provided subscription.
  1284. // Format is `projects/{project}/snapshots/{snap}`.
  1285. string snapshot = 3 [(google.api.resource_reference) = {
  1286. type: "pubsub.googleapis.com/Snapshot"
  1287. }];
  1288. }
  1289. }
  1290. // Response for the `Seek` method (this response is empty).
  1291. message SeekResponse {}