Exemplo n.º 1
0
        /// <summary>
        /// Creates a <see cref="Flow{TIn,TOut,TMat}"/> for ack a single SQS message
        /// at a time using a <paramref name="client"/>.
        /// </summary>
        public static Flow <MessageAction, ISqsAckResult, NotUsed> Default(IAmazonSQS client, string queueUrl,
                                                                           SqsAckSettings settings = null)
        {
            settings = settings ?? SqsAckSettings.Default;

            return(Flow.Create <MessageAction>()
                   .SelectAsync(settings.MaxInFlight, async action =>
            {
                switch (action)
                {
                case Delete delete:
                    {
                        var request = new DeleteMessageRequest(queueUrl, delete.Message.ReceiptHandle);
                        var response = await client.DeleteMessageAsync(request);
                        return (ISqsAckResult) new SqsDeleteResult(delete, response);
                    }

                case ChangeMessageVisibility changeVisibility:
                    {
                        var request = new ChangeMessageVisibilityRequest(queueUrl, changeVisibility.Message.ReceiptHandle, (int)changeVisibility.VisibilityTimeout.TotalSeconds);
                        var response = await client.ChangeMessageVisibilityAsync(request);
                        return new SqsChangeMessageVisibilityResult(changeVisibility, response);
                    }

                case Ignore ignore: return new SqsIgnoreResult(ignore);

                default:
                    throw new NotSupportedException($"Message of type [{action.GetType()}] is not supported by the Akka.Streams.SQS.SqsAckFlow.Default method.");
                }
            }));
        }
Exemplo n.º 2
0
 /// <summary>
 /// Creates a <see cref="Sink{TIn,TMat}"/> for ack a single SQS message at a time using a <paramref name="client"/>.
 /// </summary>
 public static Sink <MessageAction, Task> Default(IAmazonSQS client, string queueUrl, SqsAckSettings settings = null) =>
 SqsAckFlow.Default(client, queueUrl, settings)
 .ToMaterialized(Sink.Ignore <ISqsAckResult>(), Keep.Right);