public override Task <Void> Acknowledge(AcknowledgeRequest request, ServerCallContext context) { var subscription = subscriptions[request.Id]; subscription.Consumer.Commit(new List <TopicPartitionOffset>() { new TopicPartitionOffset(new TopicPartition(request.Id, new Partition((int)request.Partition)), new Offset(Int32.Parse(request.AcknowledgeMessage)) ) }); return(Task.FromResult(new Void())); }
/// <summary> /// Marks a task as finished /// </summary> /// <returns>The task to mark completed</returns> public async Task <Guid> AcknowledgeAsync(WorkTask task) { var request = new AcknowledgeRequest { Id = task.Id.ToString() }; var wrapper = new RequestWrapper { Acknowledge = request }; await ExecuteRequest(wrapper, ResponseWrapper.MessageOneofCase.Acknowledge); return(task.Id); }
public void Acknowledge_RequestObject() { // Snippet: Acknowledge(AcknowledgeRequest,CallSettings) // Create client SubscriberClient subscriberClient = SubscriberClient.Create(); // Initialize request argument(s) AcknowledgeRequest request = new AcknowledgeRequest { SubscriptionAsSubscriptionName = new SubscriptionName("[PROJECT]", "[SUBSCRIPTION]"), AckIds = { }, }; // Make the request subscriberClient.Acknowledge(request); // End snippet }
protected override void PerformAction(IList<string> ackIds, string subscriptionName) { AcknowledgeRequest requestBody = new AcknowledgeRequest() { AckIds = ackIds }; try { ProjectsResource.SubscriptionsResource.AcknowledgeRequest request = Service.Projects.Subscriptions.Acknowledge(requestBody, subscriptionName); request.Execute(); } catch (GoogleApiException ex) when (ex.HttpStatusCode == HttpStatusCode.NotFound) { WriteResourceMissingError( exceptionMessage: $"Subscription '{subscriptionName}' does not exist in project '{Project}'.", errorId: "SubscriptionNotFound", targetObject: subscriptionName); return; } }
/// <summary> /// Acknowledges a particular received message: the Pub/Sub system can removethe given message from the subscription. Acknowledging a message whoseAck deadline has expired may succeed, but the message could have beenalready redelivered. Acknowledging a message more than once will notresult in an error. This is only used for messages received via pull. /// Documentation https://developers.google.com/pubsub/v1beta1a/reference/subscriptions/acknowledge /// Generation Note: This does not always build corectly. Google needs to standardise things I need to figuer out which ones are wrong. /// </summary> /// <param name="service">Authenticated Pubsub service.</param> /// <param name="body">A valid Pubsub v1beta1a body.</param> /// <returns>EmptyResponse</returns> public static Empty Acknowledge(PubsubService service, AcknowledgeRequest body) { try { // Initial validation. if (service == null) { throw new ArgumentNullException("service"); } if (body == null) { throw new ArgumentNullException("body"); } // Make the request. return(service.Subscriptions.Acknowledge(body).Execute()); } catch (Exception ex) { throw new Exception("Request Subscriptions.Acknowledge failed.", ex); } }
/// <summary> /// Run the example. /// </summary> /// <param name="parsedArgs">Parsed arguments for the example.</param> protected override void Run(Dictionary <string, object> parsedArgs) { string subscriptionName = (string)parsedArgs["subscription_name"]; Console.WriteLine(@"Retrieving messages from subscription: ""{0}""", subscriptionName); PullRequest pullRequest = new PullRequest(); pullRequest.MaxMessages = (int?)parsedArgs["max_messages"]; PullResponse response = null; try { response = pubSubService.Projects.Subscriptions.Pull( pullRequest, subscriptionName).Execute(); } catch (System.Exception exception) { throw new ApplicationException( $"Google Cloud Pub/Sub API returned error response:\n{exception.Message}"); } var ackIds = new List <string>(); IList <ReceivedMessage> receivedMessages = response.ReceivedMessages; if (receivedMessages.Count == 0) { Console.Out.WriteLine("No messages received from the subscription."); } else { var options = new JsonSerializerOptions(); options.WriteIndented = true; foreach (ReceivedMessage receivedMessage in receivedMessages) { ackIds.Add(receivedMessage.AckId); PubsubMessage message = receivedMessage.Message; IDictionary <string, string> messageAttributes = message.Attributes; var accountId = messageAttributes["accountId"]; var creativeId = messageAttributes["creativeId"]; Console.Out.WriteLine(@"* Creative found for buyer account ID ""{0}"" with " + @"creative ID ""{1}"" has been updated with the following " + "creative status:\n", accountId, creativeId); byte[] data = Convert.FromBase64String(message.Data); var decodedString = Encoding.UTF8.GetString(data); JsonElement jsonData = JsonSerializer.Deserialize <JsonElement>(decodedString); Console.Out.WriteLine(JsonSerializer.Serialize(jsonData, options)); } if ((bool)parsedArgs["acknowledge"]) { AcknowledgeRequest acknowledgeRequest = new AcknowledgeRequest(); acknowledgeRequest.AckIds = ackIds; Console.Out.WriteLine( "Acknowledging all {0} messages pulled from the subscription.", ackIds.Count); try { pubSubService.Projects.Subscriptions.Acknowledge(acknowledgeRequest, subscriptionName); } catch (System.Exception exception) { throw new ApplicationException( "Google Cloud Pub/Sub API returned error response:\n" + $"{exception.Message}"); } } } }
protected override void ProcessRecord() { Name = GetProjectPrefixForSubscription(Name, Project); PullRequest requestBody = new PullRequest(); requestBody.ReturnImmediately = ReturnImmediately.IsPresent; requestBody.MaxMessages = MaxMessages.HasValue ? MaxMessages : DefaultMaxMessages; if (requestBody.MaxMessages <= 0) { throw new PSArgumentException("MaxMessages parameter should have a value greater than 0."); } // Send the pull request. Raise error if subscription is not found. ProjectsResource.SubscriptionsResource.PullRequest request = Service.Projects.Subscriptions.Pull(requestBody, Name); PullResponse response = null; try { response = request.Execute(); } catch (GoogleApiException ex) when (ex.HttpStatusCode == HttpStatusCode.NotFound) { WriteResourceMissingError( exceptionMessage: $"Subscription '{Name}' does not exist in project '{Project}'.", errorId: "SubscriptionNotFound", targetObject: Name); return; } IList<ReceivedMessage> receivedMessages = response?.ReceivedMessages; if (receivedMessages == null || receivedMessages.Count == 0) { return; } // Send acknowledgement for all the messages if -AutoAck is present. if (AutoAck.IsPresent) { AcknowledgeRequest ackRequestBody = new AcknowledgeRequest() { AckIds = receivedMessages.Select(message => message.AckId).ToList() }; ProjectsResource.SubscriptionsResource.AcknowledgeRequest ackRequest = Service.Projects.Subscriptions.Acknowledge(ackRequestBody, Name); ackRequest.Execute(); } foreach (ReceivedMessage receivedMessage in receivedMessages) { PubSubMessageWithAckIdAndSubscription messageWithAck = new PubSubMessageWithAckIdAndSubscription(receivedMessage, Name); // Convert the base 64 encoded message data. if (!string.IsNullOrWhiteSpace(messageWithAck.Data)) { byte[] base64Bytes = Convert.FromBase64String(messageWithAck.Data); messageWithAck.Data = Encoding.UTF8.GetString(base64Bytes); } if (AutoAck.IsPresent) { // Remove the AckId messageWithAck.AckId = null; } WriteObject(messageWithAck); } }