/// <summary> /// Creates a <see cref="Sink{TIn,TMat}"/> that groups messages and publishes /// them in batches to a SQS queue using a <paramref name="client"/>. /// See also: https://getakka.net/articles/streams/builtinstages.html#groupedwithin /// </summary> public static Sink <SendMessageRequest, Task> GroupedMessageSink(IAmazonSQS client, string queueUrl, SqsPublishGroupedSettings settings = null) => SqsPublishFlow.Grouped(client, queueUrl, settings) .ToMaterialized(Sink.Ignore <SqsPublishResultEntry>(), Keep.Right);
/// <summary> /// Creates a <see cref="Flow{TIn,TOut,TMat}"/> to publish messages to a SQS queue using a <paramref name="client"/>. /// See also: https://getakka.net/articles/streams/builtinstages.html#groupedwithin /// </summary> public static Flow <SendMessageRequest, SqsPublishResultEntry, NotUsed> Grouped(IAmazonSQS client, string queueUrl, SqsPublishGroupedSettings settings = null) { settings = settings ?? SqsPublishGroupedSettings.Default; return(Flow.Create <SendMessageRequest>() .GroupedWithin(settings.MaxBatchSize, settings.MaxBatchWait) .Via(Batch(client, queueUrl, SqsPublishBatchSettings.Default.WithConcurrentRequests(settings.ConcurrentRequests))) .SelectMany(x => x)); }
/// <summary> /// Creates a <see cref="Sink{TIn,TMat}"/> that groups strings and publishes /// them as messages in batches to a SQS queue using a <paramref name="client"/>. /// See also: https://getakka.net/articles/streams/builtinstages.html#groupedwithin /// </summary> public static Sink <string, Task> Grouped(IAmazonSQS client, string queueUrl, SqsPublishGroupedSettings settings = null) => Flow.FromFunction((string msg) => new SendMessageRequest(queueUrl, msg)) .ToMaterialized(GroupedMessageSink(client, queueUrl, settings), Keep.Right);