コード例 #1
0
        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()));
        }
コード例 #2
0
ファイル: Client.cs プロジェクト: zlepper/brqueue.net
        /// <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);
        }
コード例 #3
0
        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
        }
コード例 #4
0
 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;
     }
 }
コード例 #5
0
        /// <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);
            }
        }
コード例 #6
0
        /// <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}");
                    }
                }
            }
        }
コード例 #7
0
        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);
            }
        }