/// <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."); } })); }
/// <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);