diff --git a/Directory.Build.props b/Directory.Build.props index 84510406d..a93a6ee32 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -60,6 +60,10 @@ cobertura,json [*.Benchmarks]*,[*Sample*]*,[*Test*]*,[xunit.*]* + + + 0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7 + diff --git a/Directory.Packages.props b/Directory.Packages.props index 4f709fabf..f378871fc 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,9 +1,9 @@ - - - - + + + + @@ -11,7 +11,7 @@ - + @@ -19,6 +19,7 @@ + diff --git a/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/Program.cs b/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/Program.cs index d9a8e61ae..3b33b5ad8 100644 --- a/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/Program.cs +++ b/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/Program.cs @@ -1,3 +1,5 @@ +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.Compression; using JustSaying.Sample.Restaurant.KitchenConsole; using JustSaying.Sample.Restaurant.KitchenConsole.Handlers; using JustSaying.Sample.Restaurant.Models; @@ -97,13 +99,19 @@ static async Task Run() config.Publications(x => { // Creates the following if they do not already exist - // - a SNS topic of name `orderreadyevent` with two tags: + // - an SNS topic of name `orderreadyevent` with two tags: // - "IsOrderEvent" with no value // - "Publisher" with the value "KitchenConsole" x.WithTopic(cfg => { cfg.WithTag("IsOrderEvent") - .WithTag("Publisher", appName); + .WithTag("Publisher", appName) + .WithWriteConfiguration(w => + w.CompressionOptions = new PublishCompressionOptions + { + CompressionEncoding = ContentEncodings.GzipBase64, // TODO validate + MessageLengthThreshold = 0 + }); }); x.WithTopic(); }); diff --git a/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/appsettings.json b/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/appsettings.json index 73faf66c5..70876ec8a 100644 --- a/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/appsettings.json +++ b/samples/src/JustSaying.Sample.Restaurant.KitchenConsole/appsettings.json @@ -1,4 +1,4 @@ { "AWSRegion": "eu-west-1", - "AWSServiceUrl": "http://localhost:4100" + "AWSServiceUrl": "http://localhost:4566" } diff --git a/samples/src/JustSaying.Sample.Restaurant.OrderingApi/appsettings.json b/samples/src/JustSaying.Sample.Restaurant.OrderingApi/appsettings.json index ad029c003..ef0bee20f 100644 --- a/samples/src/JustSaying.Sample.Restaurant.OrderingApi/appsettings.json +++ b/samples/src/JustSaying.Sample.Restaurant.OrderingApi/appsettings.json @@ -1,5 +1,5 @@ { "AWSRegion": "eu-west-1", - "AWSServiceUrl": "http://localhost:4100", + "AWSServiceUrl": "http://localhost:4566", "AllowedHosts": "*" } diff --git a/src/JustSaying.Extensions.DependencyInjection.Microsoft/IServiceCollectionExtensions.cs b/src/JustSaying.Extensions.DependencyInjection.Microsoft/IServiceCollectionExtensions.cs index 47b6ebbc6..9b3c9d7ac 100644 --- a/src/JustSaying.Extensions.DependencyInjection.Microsoft/IServiceCollectionExtensions.cs +++ b/src/JustSaying.Extensions.DependencyInjection.Microsoft/IServiceCollectionExtensions.cs @@ -4,6 +4,7 @@ using JustSaying.AwsTools.QueueCreation; using JustSaying.Fluent; using JustSaying.Messaging.Channels.Receive; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageHandling; using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware.Logging; @@ -135,16 +136,11 @@ public static IServiceCollection AddJustSaying(this IServiceCollection services, services.TryAddSingleton(serviceProvider => serviceProvider.GetRequiredService()); services.TryAddSingleton(serviceProvider => serviceProvider.GetRequiredService()); - services.TryAddSingleton(); + services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); - services.TryAddSingleton( - (p) => - { - var config = p.GetRequiredService(); - var serializerFactory = p.GetRequiredService(); - return new MessageSerializationRegister(config.MessageSubjectProvider, serializerFactory); - }); + services.TryAddEnumerable(ServiceDescriptor.Singleton()); + services.TryAddSingleton(); services.TryAddSingleton(); diff --git a/src/JustSaying.Extensions.DependencyInjection.StructureMap/JustSayingRegistry.cs b/src/JustSaying.Extensions.DependencyInjection.StructureMap/JustSayingRegistry.cs index f075905a9..ecebdc734 100644 --- a/src/JustSaying.Extensions.DependencyInjection.StructureMap/JustSayingRegistry.cs +++ b/src/JustSaying.Extensions.DependencyInjection.StructureMap/JustSayingRegistry.cs @@ -2,6 +2,7 @@ using JustSaying.AwsTools.QueueCreation; using JustSaying.Fluent; using JustSaying.Messaging.Channels.Receive; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageHandling; using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware.Logging; @@ -9,6 +10,7 @@ using JustSaying.Messaging.Monitoring; using JustSaying.Naming; using StructureMap; +using StructureMap.Pipeline; namespace JustSaying; @@ -31,7 +33,7 @@ public JustSayingRegistry() For().Use((p) => new AwsClientFactoryProxy(p.GetInstance)).Singleton(); For().Use().Singleton(); For().Use().Singleton(); - For().Use().Singleton(); + For().Use().Singleton(); For().Use().Singleton(); For().Use().Singleton(); @@ -41,18 +43,8 @@ public JustSayingRegistry() For().Transient(); For().Transient(); - - For() - .Use( - nameof(IMessageSerializationRegister), - (p) => - { - var config = p.GetInstance(); - var serializerFactory = p.GetInstance(); - return new MessageSerializationRegister(config.MessageSubjectProvider, serializerFactory); - }) - .Singleton(); - + For().Add().Singleton(); + For().Singleton(); For().Use().Singleton(); For().Singleton(); diff --git a/src/JustSaying/AwsTools/MessageAttributeKeys.cs b/src/JustSaying/AwsTools/MessageAttributeKeys.cs new file mode 100644 index 000000000..1370f7218 --- /dev/null +++ b/src/JustSaying/AwsTools/MessageAttributeKeys.cs @@ -0,0 +1,12 @@ +namespace JustSaying.AwsTools; + +/// +/// Contains constant key values for message attributes. +/// +internal static class MessageAttributeKeys +{ + /// + /// Represents the key for the Content-Encoding attribute. + /// + public const string ContentEncoding = "Content-Encoding"; +} diff --git a/src/JustSaying/AwsTools/MessageHandling/Compression/PublishCompressionOptions.cs b/src/JustSaying/AwsTools/MessageHandling/Compression/PublishCompressionOptions.cs new file mode 100644 index 000000000..9f6cc38a5 --- /dev/null +++ b/src/JustSaying/AwsTools/MessageHandling/Compression/PublishCompressionOptions.cs @@ -0,0 +1,26 @@ +using JustSaying.Messaging.Compression; + +namespace JustSaying.AwsTools.MessageHandling; + +/// +/// Represents options for message compression during publishing. +/// +public sealed class PublishCompressionOptions +{ + /// + /// Gets or sets the message length threshold in bytes. + /// Messages larger than this threshold will be compressed. + /// + /// + /// The default value is 262,144 bytes (256 KB). + /// + public int MessageLengthThreshold { get; set; } = 256 * 1024; + + /// + /// Gets or sets the compression encoding to be used. + /// + /// + /// This should correspond to a registered compression algorithm in the . + /// + public string CompressionEncoding { get; set; } +} diff --git a/src/JustSaying/AwsTools/MessageHandling/Dispatch/IMessageDispatcher.cs b/src/JustSaying/AwsTools/MessageHandling/Dispatch/IMessageDispatcher.cs index bb48f7f1b..f4353e422 100644 --- a/src/JustSaying/AwsTools/MessageHandling/Dispatch/IMessageDispatcher.cs +++ b/src/JustSaying/AwsTools/MessageHandling/Dispatch/IMessageDispatcher.cs @@ -5,7 +5,7 @@ namespace JustSaying.AwsTools.MessageHandling.Dispatch; /// /// Dispatches messages to the queue. /// -public interface IMessageDispatcher +internal interface IMessageDispatcher { /// /// Dispatches the message in to the queue in the context. @@ -14,4 +14,4 @@ public interface IMessageDispatcher /// A to stop processing the message dispatch. /// A that completes once the message has been dispatched. Task DispatchMessageAsync(IQueueMessageContext messageContext, CancellationToken cancellationToken); -} \ No newline at end of file +} diff --git a/src/JustSaying/AwsTools/MessageHandling/Dispatch/MessageDispatcher.cs b/src/JustSaying/AwsTools/MessageHandling/Dispatch/MessageDispatcher.cs index 83b6f5c27..b5af56425 100644 --- a/src/JustSaying/AwsTools/MessageHandling/Dispatch/MessageDispatcher.cs +++ b/src/JustSaying/AwsTools/MessageHandling/Dispatch/MessageDispatcher.cs @@ -8,21 +8,18 @@ namespace JustSaying.AwsTools.MessageHandling.Dispatch; -public class MessageDispatcher : IMessageDispatcher +internal sealed class MessageDispatcher : IMessageDispatcher { - private readonly IMessageSerializationRegister _serializationRegister; private readonly IMessageMonitor _messagingMonitor; private readonly MiddlewareMap _middlewareMap; private static ILogger _logger; public MessageDispatcher( - IMessageSerializationRegister serializationRegister, IMessageMonitor messagingMonitor, MiddlewareMap middlewareMap, ILoggerFactory loggerFactory) { - _serializationRegister = serializationRegister; _messagingMonitor = messagingMonitor; _middlewareMap = middlewareMap; _logger = loggerFactory.CreateLogger("JustSaying"); @@ -68,7 +65,6 @@ public async Task DispatchMessageAsync( await middleware.RunAsync(handleContext, null, cancellationToken) .ConfigureAwait(false); - } private async Task<(bool success, Message typedMessage, MessageAttributes attributes)> @@ -76,10 +72,11 @@ await middleware.RunAsync(handleContext, null, cancellationToken) { try { - _logger.LogDebug("Attempting to deserialize message with serialization register {Type}", - _serializationRegister.GetType().FullName); - var messageWithAttributes = _serializationRegister.DeserializeMessage(messageContext.Message.Body); - return (true, messageWithAttributes.Message, messageWithAttributes.MessageAttributes); + _logger.LogDebug("Attempting to deserialize message."); + + var (message, attributes) = await messageContext.MessageConverter.ConvertForReceiveAsync(messageContext.Message); + + return (true, message, attributes); } catch (MessageFormatNotSupportedException ex) { diff --git a/src/JustSaying/AwsTools/MessageHandling/ForeignTopicArnProvider.cs b/src/JustSaying/AwsTools/MessageHandling/ForeignTopicArnProvider.cs index 40afe039d..1a36f393f 100644 --- a/src/JustSaying/AwsTools/MessageHandling/ForeignTopicArnProvider.cs +++ b/src/JustSaying/AwsTools/MessageHandling/ForeignTopicArnProvider.cs @@ -2,17 +2,10 @@ namespace JustSaying.AwsTools.MessageHandling; -internal class ForeignTopicArnProvider(RegionEndpoint regionEndpoint, string accountId, string topicName) : ITopicArnProvider +internal class ForeignTopicArnProvider(RegionEndpoint regionEndpoint, string accountId, string topicName) { - private readonly string _arn = $"arn:aws:sns:{regionEndpoint.SystemName}:{accountId}:{topicName}"; - public Task ArnExistsAsync() - { - // Assume foreign topics exist, we actually find out when we attempt to subscribe - return Task.FromResult(true); - } - public Task GetArnAsync() { return Task.FromResult(_arn); diff --git a/src/JustSaying/AwsTools/MessageHandling/IPublishMessageConverter.cs b/src/JustSaying/AwsTools/MessageHandling/IPublishMessageConverter.cs new file mode 100644 index 000000000..e038dec1e --- /dev/null +++ b/src/JustSaying/AwsTools/MessageHandling/IPublishMessageConverter.cs @@ -0,0 +1,27 @@ +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.Models; + +namespace JustSaying.Messaging; + +public interface IPublishMessageConverter +{ + /// + /// Converts a message to a format suitable for publishing, applying necessary transformations and compression. + /// + /// The original message to be converted. + /// Metadata associated with the publish operation, including any custom message attributes. + /// A object containing the converted message body, attributes, and any additional publishing information. + /// + /// This method handles the following operations: + ///
    + ///
  • Serializes the message body
  • + ///
  • Adds custom message attributes
  • + ///
  • Applies compression to the message body if it meets specified criteria
  • + ///
  • Adds compression-related attributes if compression is applied
  • + ///
  • Prepares the message for SNS (if applicable) by setting the subject
  • + ///
+ /// The exact behavior may vary based on the destination type and compression options. + ///
+ ValueTask ConvertForPublishAsync(Message message, PublishMetadata publishMetadata); +} diff --git a/src/JustSaying/AwsTools/MessageHandling/IReceivedMessageConverter.cs b/src/JustSaying/AwsTools/MessageHandling/IReceivedMessageConverter.cs new file mode 100644 index 000000000..d459d3222 --- /dev/null +++ b/src/JustSaying/AwsTools/MessageHandling/IReceivedMessageConverter.cs @@ -0,0 +1,17 @@ +using JustSaying.Messaging.MessageSerialization; + +namespace JustSaying.Messaging; + +public interface IReceivedMessageConverter +{ + /// + /// Converts an Amazon SQS message to a object. + /// + /// The Amazon SQS message to convert. + /// A object containing the deserialized message body and attributes. + /// + /// This method handles the conversion of both raw SQS messages and SNS-wrapped messages. + /// It also applies any necessary decompression to the message body. + /// + ValueTask ConvertForReceiveAsync(Amazon.SQS.Model.Message message); +} diff --git a/src/JustSaying/AwsTools/MessageHandling/ISqsQueue.cs b/src/JustSaying/AwsTools/MessageHandling/ISqsQueue.cs index 97bf4dc6d..01b033001 100644 --- a/src/JustSaying/AwsTools/MessageHandling/ISqsQueue.cs +++ b/src/JustSaying/AwsTools/MessageHandling/ISqsQueue.cs @@ -76,4 +76,4 @@ Task ChangeMessageVisibilityAsync( int visibilityTimeoutInSeconds, CancellationToken cancellationToken); -} \ No newline at end of file +} diff --git a/src/JustSaying/AwsTools/MessageHandling/ITopicArnProvider.cs b/src/JustSaying/AwsTools/MessageHandling/ITopicArnProvider.cs deleted file mode 100644 index c2b1a5cd8..000000000 --- a/src/JustSaying/AwsTools/MessageHandling/ITopicArnProvider.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace JustSaying.AwsTools.MessageHandling; - -internal interface ITopicArnProvider -{ - Task ArnExistsAsync(); - Task GetArnAsync(); -} \ No newline at end of file diff --git a/src/JustSaying/AwsTools/MessageHandling/LocalTopicArnProvider.cs b/src/JustSaying/AwsTools/MessageHandling/LocalTopicArnProvider.cs deleted file mode 100644 index ffe5a49e5..000000000 --- a/src/JustSaying/AwsTools/MessageHandling/LocalTopicArnProvider.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Amazon.SimpleNotificationService; - -namespace JustSaying.AwsTools.MessageHandling; - -internal class LocalTopicArnProvider : ITopicArnProvider -{ - private readonly IAmazonSimpleNotificationService _client; - private readonly Lazy> _lazyGetArnAsync; - private bool _exists; - - public LocalTopicArnProvider(IAmazonSimpleNotificationService client, string topicName) - { - _client = client; - - _lazyGetArnAsync = new Lazy>(() => GetArnInternalAsync(topicName)); - } - - private async Task GetArnInternalAsync(string topicName) - { - try - { - var topic = await _client.FindTopicAsync(topicName).ConfigureAwait(false); - - _exists = true; - return topic.TopicArn; - } - catch (Exception) - { - // ignored - } - return null; - } - - public Task GetArnAsync() - { - return _lazyGetArnAsync.Value; - } - - public async Task ArnExistsAsync() - { - _ = await _lazyGetArnAsync.Value.ConfigureAwait(false); - return _exists; - } -} diff --git a/src/JustSaying/AwsTools/MessageHandling/PublishDestinationType.cs b/src/JustSaying/AwsTools/MessageHandling/PublishDestinationType.cs new file mode 100644 index 000000000..8c2ed1f02 --- /dev/null +++ b/src/JustSaying/AwsTools/MessageHandling/PublishDestinationType.cs @@ -0,0 +1,7 @@ +namespace JustSaying.AwsTools.MessageHandling; + +public enum PublishDestinationType +{ + Topic = 1, + Queue = 2 +} diff --git a/src/JustSaying/AwsTools/MessageHandling/PublishMessageConverter.cs b/src/JustSaying/AwsTools/MessageHandling/PublishMessageConverter.cs new file mode 100644 index 000000000..135fdc782 --- /dev/null +++ b/src/JustSaying/AwsTools/MessageHandling/PublishMessageConverter.cs @@ -0,0 +1,154 @@ +using System.Text; +using System.Text.Json.Nodes; +using JustSaying.AwsTools; +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.Models; + +namespace JustSaying.Messaging; + +internal sealed class PublishMessageConverter : IPublishMessageConverter +{ + private readonly PublishDestinationType _destinationType; + private readonly IMessageBodySerializer _bodySerializer; + private readonly MessageCompressionRegistry _compressionRegistry; + private readonly PublishCompressionOptions _compressionOptions; + private readonly string _subject; + private readonly bool _isRawMessage; + + public PublishMessageConverter(PublishDestinationType destinationType, IMessageBodySerializer bodySerializer, MessageCompressionRegistry compressionRegistry, PublishCompressionOptions compressionOptions, string subject, bool isRawMessage) + { + _destinationType = destinationType; + _bodySerializer = bodySerializer; + _compressionRegistry = compressionRegistry; + _compressionOptions = compressionOptions; + _subject = subject; + _isRawMessage = isRawMessage; + } + + public ValueTask ConvertForPublishAsync(Message message, PublishMetadata publishMetadata) + { + var messageBody = _bodySerializer.Serialize(message); + + Dictionary attributeValues = new(); + AddMessageAttributes(attributeValues, publishMetadata); + + (string compressedMessage, string contentEncoding) = CompressMessageBody(messageBody, publishMetadata, _destinationType, _compressionOptions, _compressionRegistry); + if (compressedMessage is not null) + { + messageBody = compressedMessage; + attributeValues.Add(MessageAttributeKeys.ContentEncoding, new MessageAttributeValue { DataType = "String", StringValue = contentEncoding }); + } + + if (_destinationType == PublishDestinationType.Queue && !_isRawMessage) + { + messageBody = new JsonObject + { + ["Message"] = messageBody, + ["Subject"] = _subject + }.ToJsonString(); + } + + return new ValueTask(new PublishMessage(messageBody, attributeValues, _subject)); + } + + private static void AddMessageAttributes(Dictionary requestMessageAttributes, PublishMetadata metadata) + { + if (metadata?.MessageAttributes == null || metadata.MessageAttributes.Count == 0) + { + return; + } + + foreach (var attribute in metadata.MessageAttributes) + { + requestMessageAttributes.Add(attribute.Key, attribute.Value); + } + } + + /// + /// Compresses a message if it meets the specified compression criteria. + /// + /// The original message to potentially compress. + /// Metadata associated with the message. + /// The type of destination ( or ) for the message. + /// Options specifying when and how to compress. + /// Registry of available compression algorithms. + /// A tuple containing the compressed message (or null if not compressed) and the content encoding used (or null if not compressed). + public static (string compressedMessage, string contentEncoding) + CompressMessageBody( + string message, + PublishMetadata metadata, + PublishDestinationType destinationType, + PublishCompressionOptions compressionOptions, + MessageCompressionRegistry compressionRegistry) + { + string contentEncoding = null; + string compressedMessage = null; + if (compressionOptions?.CompressionEncoding is { } compressionEncoding && compressionRegistry is not null) + { + var messageSize = CalculateTotalMessageSize(message, metadata); + if (messageSize >= compressionOptions.MessageLengthThreshold) + { + var compression = compressionRegistry.GetCompression(compressionEncoding); + if (compression is null) + { + throw new InvalidOperationException($"No compression algorithm registered for encoding '{compressionEncoding}'."); + } + + JsonNode jsonNode = null; + if (destinationType == PublishDestinationType.Queue) + { + jsonNode = JsonNode.Parse(message); + if (jsonNode is JsonObject jsonObject && jsonObject.TryGetPropertyValue("Message", out var messageNode)) + { + message = messageNode?.GetValue(); + } + } + compressedMessage = compression.Compress(message); + contentEncoding = compressionEncoding; + + if (destinationType == PublishDestinationType.Queue) + { + if (jsonNode is JsonObject jsonObject) + { + jsonObject["Message"] = compressedMessage; + compressedMessage = jsonObject.ToJsonString(); + } + } + } + } + + return (compressedMessage, contentEncoding); + } + + /// + /// Calculates the total size of a message, including its metadata. + /// + /// The message content. + /// Metadata associated with the message. + /// The total size of the message in bytes. + private static int CalculateTotalMessageSize(string message, PublishMetadata metadata) + { + var messageSize = Encoding.UTF8.GetByteCount(message); + if (metadata?.MessageAttributes != null) + { + foreach (var attribute in metadata.MessageAttributes) + { + messageSize += Encoding.UTF8.GetByteCount(attribute.Key); + messageSize += Encoding.UTF8.GetByteCount(attribute.Value.DataType); + if (attribute.Value.StringValue is not null) + { + messageSize += Encoding.UTF8.GetByteCount(attribute.Value.StringValue); + } + + if (attribute.Value.BinaryValue is not null) + { + messageSize += attribute.Value.BinaryValue.Count; + } + } + } + + return messageSize; + } +} diff --git a/src/JustSaying/AwsTools/MessageHandling/ReceivedMessageConverter.cs b/src/JustSaying/AwsTools/MessageHandling/ReceivedMessageConverter.cs new file mode 100644 index 000000000..250463bcf --- /dev/null +++ b/src/JustSaying/AwsTools/MessageHandling/ReceivedMessageConverter.cs @@ -0,0 +1,142 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using JustSaying.AwsTools; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageHandling; +using JustSaying.Messaging.MessageSerialization; + +namespace JustSaying.Messaging; + +internal sealed class ReceivedMessageConverter : IReceivedMessageConverter +{ + private readonly IMessageBodySerializer _bodySerializer; + private readonly MessageCompressionRegistry _compressionRegistry; + private readonly bool _isRawMessage; + + public ReceivedMessageConverter(IMessageBodySerializer bodySerializer, MessageCompressionRegistry compressionRegistry, bool isRawMessage) + { + _bodySerializer = bodySerializer; + _compressionRegistry = compressionRegistry; + _isRawMessage = isRawMessage; + } + + public ValueTask ConvertForReceiveAsync(Amazon.SQS.Model.Message message) + { + string body = message.Body; + var attributes = GetMessageAttributes(message, body); + + if (body is not null && !_isRawMessage) + { + var jsonNode = JsonNode.Parse(body); + if (jsonNode is JsonObject jsonObject && jsonObject.TryGetPropertyValue("Message", out var messageNode)) + { + body = messageNode?.GetValue(); + } + } + body = ApplyBodyDecompression(body, attributes); + var result = _bodySerializer.Deserialize(body); + return new ValueTask(new ReceivedMessage(result, attributes)); + } + + private string ApplyBodyDecompression(string body, MessageAttributes attributes) + { + var contentEncoding = attributes.Get(MessageAttributeKeys.ContentEncoding); + if (contentEncoding is not null) + { + var decompressor = _compressionRegistry.GetCompression(contentEncoding.StringValue); + if (decompressor is null) + { + throw new InvalidOperationException($"Compression encoding '{contentEncoding.StringValue}' is not registered."); + } + + body = decompressor.Decompress(body); + } + + return body; + } + + private static MessageAttributes GetMessageAttributes(Amazon.SQS.Model.Message message, string body) + { + bool isSnsPayload = IsSnsPayload(body); + var attributes = isSnsPayload ? GetMessageAttributes(body) : GetRawMessageAttributes(message); + + return attributes; + } + + private static MessageAttributes GetMessageAttributes(string message) + { + using var jsonDocument = JsonDocument.Parse(message); + + if (!jsonDocument.RootElement.TryGetProperty("MessageAttributes", out var attributesElement)) + { + return new MessageAttributes(); + } + + Dictionary attributes = new(); + foreach (var obj in attributesElement.EnumerateObject()) + { + var dataType = obj.Value.GetProperty("Type").GetString(); + var dataValue = obj.Value.GetProperty("Value").GetString(); + + var isString = dataType == "String"; + + attributes.Add(obj.Name, new MessageAttributeValue + { + DataType = dataType, + StringValue = isString ? dataValue : null, + BinaryValue = !isString ? Convert.FromBase64String(dataValue) : null + }); + } + + return new MessageAttributes(attributes); + } + + private static MessageAttributes GetRawMessageAttributes(Amazon.SQS.Model.Message message) + { + if (message.MessageAttributes is null) + { + return new MessageAttributes(); + } + + Dictionary rawAttributes = new (); + + foreach (var messageMessageAttribute in message.MessageAttributes) + { + var dataType = messageMessageAttribute.Value.DataType; + var dataValue = messageMessageAttribute.Value.StringValue; + var isString = dataType == "String"; + var messageAttributeValue = new MessageAttributeValue + { + DataType = dataType, + StringValue = isString ? dataValue : null, + BinaryValue = !isString ? Convert.FromBase64String(dataValue) : null + }; + rawAttributes.Add(messageMessageAttribute.Key, messageAttributeValue); + } + + return new MessageAttributes(rawAttributes); + } + + private static bool IsSnsPayload(string body) + { + if (body is null) + { + return false; + } + + try + { + using var jsonDocument = JsonDocument.Parse(body); + if (jsonDocument.RootElement.TryGetProperty("Type", out var typeElement)) + { + return typeElement.GetString() is "Notification"; + } + } + catch + { + // ignored + } + + return false; + } +} diff --git a/src/JustSaying/AwsTools/MessageHandling/SnsMessagePublisher.cs b/src/JustSaying/AwsTools/MessageHandling/SnsMessagePublisher.cs index 835773bcf..e85677ae5 100644 --- a/src/JustSaying/AwsTools/MessageHandling/SnsMessagePublisher.cs +++ b/src/JustSaying/AwsTools/MessageHandling/SnsMessagePublisher.cs @@ -3,36 +3,32 @@ using Amazon.SimpleNotificationService.Model; using JustSaying.Messaging; using JustSaying.Messaging.Interrogation; -using JustSaying.Messaging.MessageSerialization; using JustSaying.Models; using Microsoft.Extensions.Logging; using MessageAttributeValue = Amazon.SimpleNotificationService.Model.MessageAttributeValue; namespace JustSaying.AwsTools.MessageHandling; -public class SnsMessagePublisher( +internal sealed class SnsMessagePublisher( IAmazonSimpleNotificationService client, - IMessageSerializationRegister serializationRegister, + IPublishMessageConverter messageConverter, ILoggerFactory loggerFactory, - IMessageSubjectProvider messageSubjectProvider, Func handleException = null) : IMessagePublisher, IInterrogable { - private readonly IMessageSerializationRegister _serializationRegister = serializationRegister; - private readonly IMessageSubjectProvider _messageSubjectProvider = messageSubjectProvider; + private readonly IPublishMessageConverter _messageConverter = messageConverter; private readonly Func _handleException = handleException; + private readonly IAmazonSimpleNotificationService _client = client; public Action MessageResponseLogger { get; set; } public string Arn { get; internal set; } - protected IAmazonSimpleNotificationService Client { get; } = client; private readonly ILogger _logger = loggerFactory.CreateLogger("JustSaying.Publish"); public SnsMessagePublisher( string topicArn, IAmazonSimpleNotificationService client, - IMessageSerializationRegister serializationRegister, + IPublishMessageConverter messageConverter, ILoggerFactory loggerFactory, - IMessageSubjectProvider messageSubjectProvider, Func handleException = null) - : this(client, serializationRegister, loggerFactory, messageSubjectProvider, handleException) + : this(client, messageConverter, loggerFactory,handleException) { Arn = topicArn; } @@ -47,11 +43,11 @@ public Task PublishAsync(Message message, CancellationToken cancellationToken) public async Task PublishAsync(Message message, PublishMetadata metadata, CancellationToken cancellationToken) { - var request = BuildPublishRequest(message, metadata); + var request = await BuildPublishRequestAsync(message, metadata); PublishResponse response = null; try { - response = await Client.PublishAsync(request, cancellationToken).ConfigureAwait(false); + response = await _client.PublishAsync(request, cancellationToken).ConfigureAwait(false); } catch (AmazonServiceException ex) { @@ -90,29 +86,33 @@ public async Task PublishAsync(Message message, PublishMetadata metadata, Cancel private bool ClientExceptionHandler(Exception ex, Message message) => _handleException?.Invoke(ex, message) ?? false; - private PublishRequest BuildPublishRequest(Message message, PublishMetadata metadata) + private async Task BuildPublishRequestAsync(Message message, PublishMetadata metadata) { - var messageToSend = _serializationRegister.Serialize(message, serializeForSnsPublishing: true); - var messageType = _messageSubjectProvider.GetSubjectForType(message.GetType()); + var (messageToSend, attributes, subject) = await _messageConverter.ConvertForPublishAsync(message, metadata); - return new PublishRequest + var request = new PublishRequest { TopicArn = Arn, - Subject = messageType, + Subject = subject, Message = messageToSend, - MessageAttributes = BuildMessageAttributes(metadata) }; + + AddMessageAttributes(request.MessageAttributes, attributes); + + return request; } - private static Dictionary BuildMessageAttributes(PublishMetadata metadata) + private static void AddMessageAttributes(Dictionary requestMessageAttributes, Dictionary attributes) { - if (metadata?.MessageAttributes == null || metadata.MessageAttributes.Count == 0) + if (attributes == null || attributes.Count == 0) { - return null; + return; + } + + foreach (var attribute in attributes) + { + requestMessageAttributes.Add(attribute.Key, BuildMessageAttributeValue(attribute.Value)); } - return metadata.MessageAttributes.ToDictionary( - source => source.Key, - source => BuildMessageAttributeValue(source.Value)); } private static MessageAttributeValue BuildMessageAttributeValue(Messaging.MessageAttributeValue value) @@ -134,7 +134,7 @@ private static MessageAttributeValue BuildMessageAttributeValue(Messaging.Messag }; } - public virtual InterrogationResult Interrogate() + public InterrogationResult Interrogate() { return new InterrogationResult(new { diff --git a/src/JustSaying/AwsTools/MessageHandling/SqsMessagePublisher.cs b/src/JustSaying/AwsTools/MessageHandling/SqsMessagePublisher.cs index dc6a77337..cbab2e8f3 100644 --- a/src/JustSaying/AwsTools/MessageHandling/SqsMessagePublisher.cs +++ b/src/JustSaying/AwsTools/MessageHandling/SqsMessagePublisher.cs @@ -3,15 +3,15 @@ using Amazon.SQS.Model; using JustSaying.Messaging; using JustSaying.Messaging.Interrogation; -using JustSaying.Messaging.MessageSerialization; using Microsoft.Extensions.Logging; using Message = JustSaying.Models.Message; +using MessageAttributeValue = Amazon.SQS.Model.MessageAttributeValue; namespace JustSaying.AwsTools.MessageHandling; -public class SqsMessagePublisher( +internal sealed class SqsMessagePublisher( IAmazonSQS client, - IMessageSerializationRegister serializationRegister, + PublishMessageConverter messageConverter, ILoggerFactory loggerFactory) : IMessagePublisher { private readonly ILogger _logger = loggerFactory.CreateLogger("JustSaying.Publish"); @@ -22,8 +22,8 @@ public class SqsMessagePublisher( public SqsMessagePublisher( Uri queueUrl, IAmazonSQS client, - IMessageSerializationRegister serializationRegister, - ILoggerFactory loggerFactory) : this(client, serializationRegister, loggerFactory) + PublishMessageConverter messageConverter, + ILoggerFactory loggerFactory) : this(client, messageConverter, loggerFactory) { QueueUrl = queueUrl; } @@ -40,7 +40,7 @@ public async Task PublishAsync(Message message, PublishMetadata metadata, Cancel { if (QueueUrl is null) throw new PublishException("Queue URL was null, perhaps you need to call `StartAsync` on the `IMessagePublisher` before publishing."); - var request = BuildSendMessageRequest(message, metadata); + var request = await BuildSendMessageRequestAsync(message, metadata); SendMessageResponse response; try { @@ -78,14 +78,18 @@ public async Task PublishAsync(Message message, PublishMetadata metadata, Cancel } } - private SendMessageRequest BuildSendMessageRequest(Message message, PublishMetadata metadata) + private async Task BuildSendMessageRequestAsync(Message message, PublishMetadata metadata) { + var (messageBody, attributes, _) = await messageConverter.ConvertForPublishAsync(message, metadata); + var request = new SendMessageRequest { - MessageBody = GetMessageInContext(message), - QueueUrl = QueueUrl.AbsoluteUri, + MessageBody = messageBody, + QueueUrl = QueueUrl.AbsoluteUri }; + AddMessageAttributes(request.MessageAttributes, attributes); + if (metadata?.Delay != null) { request.DelaySeconds = (int) metadata.Delay.Value.TotalSeconds; @@ -94,7 +98,37 @@ private SendMessageRequest BuildSendMessageRequest(Message message, PublishMetad return request; } - public string GetMessageInContext(Message message) => serializationRegister.Serialize(message, serializeForSnsPublishing: false); + private static void AddMessageAttributes(Dictionary requestMessageAttributes, Dictionary messageAttributes) + { + if (messageAttributes == null || messageAttributes.Count == 0) + { + return; + } + + foreach (var attribute in messageAttributes) + { + requestMessageAttributes.Add(attribute.Key, BuildMessageAttributeValue(attribute.Value)); + } + } + + private static MessageAttributeValue BuildMessageAttributeValue(Messaging.MessageAttributeValue value) + { + if (value == null) + { + return null; + } + + var binaryValueStream = value.BinaryValue != null + ? new MemoryStream([.. value.BinaryValue], false) + : null; + + return new MessageAttributeValue + { + StringValue = value.StringValue, + BinaryValue = binaryValueStream, + DataType = value.DataType + }; + } public InterrogationResult Interrogate() { diff --git a/src/JustSaying/AwsTools/MessageHandling/SqsQueueReader.cs b/src/JustSaying/AwsTools/MessageHandling/SqsQueueReader.cs index 0a33a5410..0b194ac9d 100644 --- a/src/JustSaying/AwsTools/MessageHandling/SqsQueueReader.cs +++ b/src/JustSaying/AwsTools/MessageHandling/SqsQueueReader.cs @@ -1,4 +1,5 @@ using Amazon.SQS.Model; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Context; namespace JustSaying.AwsTools.MessageHandling; @@ -6,10 +7,12 @@ namespace JustSaying.AwsTools.MessageHandling; internal class SqsQueueReader { private readonly ISqsQueue _sqsQueue; + private readonly IReceivedMessageConverter _messageConverter; - internal SqsQueueReader(ISqsQueue sqsQueue) + internal SqsQueueReader(ISqsQueue sqsQueue, IReceivedMessageConverter messageConverter) { _sqsQueue = sqsQueue; + _messageConverter = messageConverter; } internal string QueueName => _sqsQueue.QueueName; @@ -20,7 +23,7 @@ internal SqsQueueReader(ISqsQueue sqsQueue) internal IQueueMessageContext ToMessageContext(Message message) { - return new QueueMessageContext(message, this); + return new QueueMessageContext(message, this, _messageConverter); } internal async Task> GetMessagesAsync( @@ -57,4 +60,4 @@ await _sqsQueue.ChangeMessageVisibilityAsync( (int)timeout.TotalSeconds, cancellationToken).ConfigureAwait(false); } -} \ No newline at end of file +} diff --git a/src/JustSaying/AwsTools/QueueCreation/AmazonQueueCreator.cs b/src/JustSaying/AwsTools/QueueCreation/AmazonQueueCreator.cs index 69c773c55..ce3ec74b1 100644 --- a/src/JustSaying/AwsTools/QueueCreation/AmazonQueueCreator.cs +++ b/src/JustSaying/AwsTools/QueueCreation/AmazonQueueCreator.cs @@ -33,7 +33,8 @@ await SubscribeQueueAndApplyFilterPolicyAsync(snsClient, topicArn, sqsClient, queue.Uri, - queueConfig.FilterPolicy).ConfigureAwait(false); + queueConfig.FilterPolicy, + queueConfig.RawMessageDelivery).ConfigureAwait(false); } else { @@ -46,7 +47,8 @@ await SubscribeQueueAndApplyFilterPolicyAsync(snsClient, eventTopic.Arn, sqsClient, queue.Uri, - queueConfig.FilterPolicy).ConfigureAwait(false); + queueConfig.FilterPolicy, + queueConfig.RawMessageDelivery).ConfigureAwait(false); var sqsDetails = new SqsPolicyDetails { @@ -94,7 +96,8 @@ private static async Task SubscribeQueueAndApplyFilterPolicyAsync( string topicArn, IAmazonSQS amazonSQS, Uri queueUrl, - string filterPolicy) + string filterPolicy, + bool rawMessageDelivery) { if (amazonSimpleNotificationService == null) throw new ArgumentNullException(nameof(amazonSimpleNotificationService)); if (amazonSQS == null) throw new ArgumentNullException(nameof(amazonSQS)); @@ -110,5 +113,8 @@ private static async Task SubscribeQueueAndApplyFilterPolicyAsync( await amazonSimpleNotificationService .SetSubscriptionAttributesAsync(subscriptionArn, "FilterPolicy", actualFilterPolicy) .ConfigureAwait(false); + await amazonSimpleNotificationService + .SetSubscriptionAttributesAsync(subscriptionArn, "RawMessageDelivery", rawMessageDelivery.ToString().ToLowerInvariant()) + .ConfigureAwait(false); } } diff --git a/src/JustSaying/AwsTools/QueueCreation/RedrivePolicy.cs b/src/JustSaying/AwsTools/QueueCreation/RedrivePolicy.cs index ea6b1af25..b43e9894a 100644 --- a/src/JustSaying/AwsTools/QueueCreation/RedrivePolicy.cs +++ b/src/JustSaying/AwsTools/QueueCreation/RedrivePolicy.cs @@ -1,15 +1,13 @@ +using System.Text.Json; using System.Text.Json.Serialization; -using Newtonsoft.Json; namespace JustSaying.AwsTools.QueueCreation; -public class RedrivePolicy +internal sealed class RedrivePolicy { - [JsonProperty("maxReceiveCount")] [JsonPropertyName("maxReceiveCount")] public int MaximumReceives { get; set; } - [JsonProperty("deadLetterTargetArn")] [JsonPropertyName("deadLetterTargetArn")] public string DeadLetterQueue { get; set; } @@ -19,15 +17,9 @@ public RedrivePolicy(int maximumReceives, string deadLetterQueue) DeadLetterQueue = deadLetterQueue; } - protected RedrivePolicy() - { - } - - // Cannot use System.Text.Json below as no public parameterless constructor. Change for v7? - public override string ToString() - => JsonConvert.SerializeObject(this); + => JsonSerializer.Serialize(this); public static RedrivePolicy ConvertFromString(string policy) - => JsonConvert.DeserializeObject(policy); -} \ No newline at end of file + => JsonSerializer.Deserialize(policy); +} diff --git a/src/JustSaying/AwsTools/QueueCreation/SnsWriteConfiguration.cs b/src/JustSaying/AwsTools/QueueCreation/SnsWriteConfiguration.cs index ffd472189..7e85bc520 100644 --- a/src/JustSaying/AwsTools/QueueCreation/SnsWriteConfiguration.cs +++ b/src/JustSaying/AwsTools/QueueCreation/SnsWriteConfiguration.cs @@ -1,3 +1,4 @@ +using JustSaying.AwsTools.MessageHandling; using JustSaying.Models; namespace JustSaying.AwsTools.QueueCreation; @@ -5,10 +6,12 @@ namespace JustSaying.AwsTools.QueueCreation; public class SnsWriteConfiguration { public ServerSideEncryption Encryption { get; set; } + public PublishCompressionOptions CompressionOptions { get; set; } + public bool IsRawMessage { get; set; } /// /// Extension point enabling custom error handling on a per notification basis, including ability handle raised exceptions. /// /// Boolean indicating whether the exception has been handled public Func HandleException { get; set; } -} \ No newline at end of file +} diff --git a/src/JustSaying/AwsTools/QueueCreation/SqsBasicConfiguration.cs b/src/JustSaying/AwsTools/QueueCreation/SqsBasicConfiguration.cs index 0e84aa3ec..c3b3c00ed 100644 --- a/src/JustSaying/AwsTools/QueueCreation/SqsBasicConfiguration.cs +++ b/src/JustSaying/AwsTools/QueueCreation/SqsBasicConfiguration.cs @@ -1,16 +1,19 @@ +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Fluent; using JustSaying.Naming; namespace JustSaying.AwsTools.QueueCreation; public class SqsBasicConfiguration { - public TimeSpan MessageRetention { get; set; } - public TimeSpan ErrorQueueRetentionPeriod { get; set; } - public TimeSpan VisibilityTimeout { get; set; } - public TimeSpan DeliveryDelay { get; set; } - public int RetryCountBeforeSendingToErrorQueue { get; set; } + public TimeSpan MessageRetention { get; set; } = JustSayingConstants.DefaultRetentionPeriod; + public TimeSpan ErrorQueueRetentionPeriod { get; set; } = JustSayingConstants.MaximumRetentionPeriod; + public TimeSpan VisibilityTimeout { get; set; } = JustSayingConstants.DefaultVisibilityTimeout; + public TimeSpan DeliveryDelay { get; set; } = JustSayingConstants.MinimumDeliveryDelay; + public int RetryCountBeforeSendingToErrorQueue { get; set; } = JustSayingConstants.DefaultHandlerRetryCount; public bool ErrorQueueOptOut { get; set; } public ServerSideEncryption ServerSideEncryption { get; set; } + public bool IsRawMessage { get; set; } public string QueueName { get; set; } public void ApplyQueueNamingConvention(IQueueNamingConvention namingConvention) @@ -18,15 +21,6 @@ public void ApplyQueueNamingConvention(IQueueNamingConvention namingConventio QueueName = namingConvention.Apply(QueueName); } - public SqsBasicConfiguration() - { - MessageRetention = JustSayingConstants.DefaultRetentionPeriod; - ErrorQueueRetentionPeriod = JustSayingConstants.MaximumRetentionPeriod; - VisibilityTimeout = JustSayingConstants.DefaultVisibilityTimeout; - RetryCountBeforeSendingToErrorQueue = JustSayingConstants.DefaultHandlerRetryCount; - DeliveryDelay = JustSayingConstants.MinimumDeliveryDelay; - } - public void Validate() { if (MessageRetention < JustSayingConstants.MinimumRetentionPeriod || diff --git a/src/JustSaying/AwsTools/QueueCreation/SqsReadConfiguration.cs b/src/JustSaying/AwsTools/QueueCreation/SqsReadConfiguration.cs index 67ccfe989..f3f3c9b66 100644 --- a/src/JustSaying/AwsTools/QueueCreation/SqsReadConfiguration.cs +++ b/src/JustSaying/AwsTools/QueueCreation/SqsReadConfiguration.cs @@ -1,3 +1,4 @@ +using JustSaying.Models; using JustSaying.Naming; namespace JustSaying.AwsTools.QueueCreation; @@ -20,9 +21,10 @@ public SqsReadConfiguration(SubscriptionType subscriptionType) public Dictionary Tags { get; set; } public string TopicSourceAccount { get; set; } public string FilterPolicy { get; set; } + public bool RawMessageDelivery { get; set; } public string SubscriptionGroupName { get; set; } - public void ApplyTopicNamingConvention(ITopicNamingConvention namingConvention) + public void ApplyTopicNamingConvention(ITopicNamingConvention namingConvention) where T: Message { TopicName = namingConvention.Apply(TopicName); } @@ -48,4 +50,4 @@ protected override void OnValidating() throw new ConfigurationErrorsException("You must provide a name for the subscription group"); } } -} \ No newline at end of file +} diff --git a/src/JustSaying/AwsTools/QueueCreation/SqsWriteConfiguration.cs b/src/JustSaying/AwsTools/QueueCreation/SqsWriteConfiguration.cs index d92be8c99..cfc4d0eef 100644 --- a/src/JustSaying/AwsTools/QueueCreation/SqsWriteConfiguration.cs +++ b/src/JustSaying/AwsTools/QueueCreation/SqsWriteConfiguration.cs @@ -1,12 +1,8 @@ +using JustSaying.AwsTools.MessageHandling; + namespace JustSaying.AwsTools.QueueCreation; public class SqsWriteConfiguration : SqsBasicConfiguration { - public SqsWriteConfiguration() - { - MessageRetention = JustSayingConstants.DefaultRetentionPeriod; - ErrorQueueRetentionPeriod = JustSayingConstants.MaximumRetentionPeriod; - VisibilityTimeout = JustSayingConstants.DefaultVisibilityTimeout; - RetryCountBeforeSendingToErrorQueue = JustSayingConstants.DefaultHandlerRetryCount; - } -} \ No newline at end of file + public PublishCompressionOptions CompressionOptions { get; set; } +} diff --git a/src/JustSaying/Extensions/AmazonSqsClientExtensions.cs b/src/JustSaying/Extensions/AmazonSqsClientExtensions.cs index c9a086227..0eba033bc 100644 --- a/src/JustSaying/Extensions/AmazonSqsClientExtensions.cs +++ b/src/JustSaying/Extensions/AmazonSqsClientExtensions.cs @@ -23,9 +23,10 @@ public static async Task> ReceiveMessagesAsync(this IAmazonSQS cl var result = await client.ReceiveMessageAsync(new ReceiveMessageRequest(queueUrl) { - AttributeNames = [.. attributesToLoad], + MessageSystemAttributeNames = [.. attributesToLoad], WaitTimeSeconds = secondsWaitTime, - MaxNumberOfMessages = maxNumOfMessages + MaxNumberOfMessages = maxNumOfMessages, + MessageAttributeNames = ["All"] }, cancellationToken).ConfigureAwait(false); diff --git a/src/JustSaying/Fluent/AccountAddressProvider.cs b/src/JustSaying/Fluent/AccountAddressProvider.cs index 14dbec3ea..0f929bbe8 100644 --- a/src/JustSaying/Fluent/AccountAddressProvider.cs +++ b/src/JustSaying/Fluent/AccountAddressProvider.cs @@ -106,10 +106,10 @@ public Uri GetQueueUriByConvention() /// The for this queue. public Uri GetQueueUri(string queueName) { - var hostname = _regionEndpoint.GetEndpointForService("sqs").Hostname; + var hostname = SqsEndpointHelper.GetSqsHostname(_regionEndpoint.PartitionName, _regionEndpoint.SystemName); return new UriBuilder("https", hostname) { Path = $"{_accountId}/{queueName}" }.Uri; } -} \ No newline at end of file +} diff --git a/src/JustSaying/Fluent/CompressionEncodingValidator.cs b/src/JustSaying/Fluent/CompressionEncodingValidator.cs new file mode 100644 index 000000000..357852418 --- /dev/null +++ b/src/JustSaying/Fluent/CompressionEncodingValidator.cs @@ -0,0 +1,18 @@ +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.Compression; + +namespace JustSaying.Fluent; + +internal static class CompressionEncodingValidator +{ + public static void ValidateEncoding(MessageCompressionRegistry compressionRegistry, PublishCompressionOptions compressionOptions) + { + if (compressionOptions?.CompressionEncoding is { } compressionEncoding) + { + if (compressionRegistry.GetCompression(compressionEncoding) is null) + { + throw new InvalidOperationException($"Compression encoding '{compressionEncoding}' is not registered with the bus."); + } + } + } +} diff --git a/src/JustSaying/Fluent/PublishConfig/StaticPublicationConfiguration.cs b/src/JustSaying/Fluent/PublishConfig/StaticPublicationConfiguration.cs index f7b8410fb..5ab4750f3 100644 --- a/src/JustSaying/Fluent/PublishConfig/StaticPublicationConfiguration.cs +++ b/src/JustSaying/Fluent/PublishConfig/StaticPublicationConfiguration.cs @@ -2,6 +2,9 @@ using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.QueueCreation; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.Models; using Microsoft.Extensions.Logging; #pragma warning disable CS0618 @@ -21,7 +24,7 @@ public static StaticPublicationConfiguration Build( SnsWriteConfiguration writeConfiguration, IAmazonSimpleNotificationService snsClient, ILoggerFactory loggerFactory, - JustSayingBus bus) + JustSayingBus bus) where T : Message { var readConfiguration = new SqsReadConfiguration(SubscriptionType.ToTopic) { @@ -30,11 +33,15 @@ public static StaticPublicationConfiguration Build( readConfiguration.ApplyTopicNamingConvention(bus.Config.TopicNamingConvention); + var compressionOptions = writeConfiguration.CompressionOptions ?? bus.Config.DefaultCompressionOptions; + var serializer = bus.MessageBodySerializerFactory.GetSerializer(); + var subjectProvider = bus.Config.MessageSubjectProvider; + var subject = subjectProvider.GetSubjectForType(typeof(T)); + var eventPublisher = new SnsMessagePublisher( snsClient, - bus.SerializationRegister, - loggerFactory, - bus.Config.MessageSubjectProvider) + new PublishMessageConverter(PublishDestinationType.Topic, serializer, new MessageCompressionRegistry([new GzipMessageBodyCompression()]), compressionOptions, subject, writeConfiguration.IsRawMessage), + loggerFactory) { MessageResponseLogger = bus.Config.MessageResponseLogger, }; diff --git a/src/JustSaying/Fluent/QueueAddress.cs b/src/JustSaying/Fluent/QueueAddress.cs index 33b6ec08a..cceae0e79 100644 --- a/src/JustSaying/Fluent/QueueAddress.cs +++ b/src/JustSaying/Fluent/QueueAddress.cs @@ -1,5 +1,6 @@ using System.Text.RegularExpressions; using Amazon; +using Amazon.SQS; namespace JustSaying.Fluent; @@ -79,9 +80,7 @@ public static QueueAddress FromArn(string queueArn) if (!Arn.TryParse(queueArn, out var arn)) throw new ArgumentException("Must be a valid ARN.", nameof(queueArn)); if (!string.Equals(arn.Service, "sqs", StringComparison.OrdinalIgnoreCase)) throw new ArgumentException("Must be an ARN for an SQS queue.", nameof(queueArn)); - var hostname = RegionEndpoint.GetBySystemName(arn.Region) - .GetEndpointForService("sqs") - .Hostname; + var hostname = SqsEndpointHelper.GetSqsHostname(arn.Partition, arn.Region); var queueUrl = new UriBuilder("https", hostname) { @@ -94,4 +93,4 @@ public static QueueAddress FromArn(string queueArn) RegionName = arn.Region }; } -} \ No newline at end of file +} diff --git a/src/JustSaying/Fluent/QueueAddressConfiguration.cs b/src/JustSaying/Fluent/QueueAddressConfiguration.cs index b0a4d28d7..94df7441d 100644 --- a/src/JustSaying/Fluent/QueueAddressConfiguration.cs +++ b/src/JustSaying/Fluent/QueueAddressConfiguration.cs @@ -1,11 +1,9 @@ -using JustSaying.Messaging.Middleware; - namespace JustSaying.Fluent; public sealed class QueueAddressConfiguration { public string SubscriptionGroupName { get; set; } - public Action MiddlewareConfiguration { get; set; } + public bool RawMessageDelivery { get; set; } public void Validate() { diff --git a/src/JustSaying/Fluent/QueueAddressPublicationBuilder`1.cs b/src/JustSaying/Fluent/QueueAddressPublicationBuilder`1.cs index bbbb689a1..f26dce9f4 100644 --- a/src/JustSaying/Fluent/QueueAddressPublicationBuilder`1.cs +++ b/src/JustSaying/Fluent/QueueAddressPublicationBuilder`1.cs @@ -1,6 +1,8 @@ using Amazon; using JustSaying.AwsTools; using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Models; using Microsoft.Extensions.Logging; @@ -16,6 +18,9 @@ public sealed class QueueAddressPublicationBuilder : IPublicationBuilder where T : Message { private readonly QueueAddress _queueAddress; + private PublishCompressionOptions _compressionOptions; + private string _subject; + private bool _isRawMessage; /// /// Initializes a new instance of the class. @@ -26,6 +31,31 @@ internal QueueAddressPublicationBuilder(QueueAddress queueAddress) _queueAddress = queueAddress; } + /// + /// Sets the compression options for publishing messages. + /// + /// The compression options to use when publishing messages. + /// The current instance of for method chaining. + /// Thrown when is null. + public QueueAddressPublicationBuilder WithCompression(PublishCompressionOptions compressionOptions) + { + _compressionOptions = compressionOptions ?? throw new ArgumentNullException(nameof(compressionOptions)); + return this; + } + + // TODO add tests + public QueueAddressPublicationBuilder WithSubject(string subject) + { + _subject = subject; + return this; + } + + public QueueAddressPublicationBuilder WithRawMessages() + { + _isRawMessage = true; + return this; + } + /// public void Configure(JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFactory loggerFactory) { @@ -33,13 +63,20 @@ public void Configure(JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFa logger.LogInformation("Adding SQS publisher for message type '{MessageType}'", typeof(T)); - bus.SerializationRegister.AddSerializer(); + var config = bus.Config; + var compressionOptions = _compressionOptions ?? bus.Config.DefaultCompressionOptions; + var subjectProvider = bus.Config.MessageSubjectProvider; + var subject = _subject ?? subjectProvider.GetSubjectForType(typeof(T)); var eventPublisher = new SqsMessagePublisher( _queueAddress.QueueUrl, proxy.GetAwsClientFactory().GetSqsClient(RegionEndpoint.GetBySystemName(_queueAddress.RegionName)), - bus.SerializationRegister, - loggerFactory); + new PublishMessageConverter(PublishDestinationType.Queue, bus.MessageBodySerializerFactory.GetSerializer(), new MessageCompressionRegistry([new GzipMessageBodyCompression()]), compressionOptions, subject, _isRawMessage), + loggerFactory) + { + MessageResponseLogger = config.MessageResponseLogger + }; + CompressionEncodingValidator.ValidateEncoding(bus.CompressionRegistry, compressionOptions); bus.AddMessagePublisher(eventPublisher); @@ -48,4 +85,4 @@ public void Configure(JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFa _queueAddress.QueueUrl, typeof(T)); } -} \ No newline at end of file +} diff --git a/src/JustSaying/Fluent/QueueAddressSubscriptionBuilder`1.cs b/src/JustSaying/Fluent/QueueAddressSubscriptionBuilder`1.cs index 2e266accc..8168b66fa 100644 --- a/src/JustSaying/Fluent/QueueAddressSubscriptionBuilder`1.cs +++ b/src/JustSaying/Fluent/QueueAddressSubscriptionBuilder`1.cs @@ -2,6 +2,10 @@ using Amazon.SQS; using JustSaying.AwsTools; using JustSaying.AwsTools.QueueCreation; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Models; using Microsoft.Extensions.Logging; @@ -32,6 +36,7 @@ internal QueueAddressSubscriptionBuilder(QueueAddress queueAddress) private Action MiddlewareConfiguration { get; set; } + private IMessageBodySerializer MessageBodySerializer { get; set; } /// /// Configures the SQS read configuration. @@ -56,6 +61,12 @@ public ISubscriptionBuilder WithMiddlewareConfiguration(Action WithMessageBodySerializer(IMessageBodySerializer messageBodySerializer) + { + MessageBodySerializer = messageBodySerializer; + return this; + } + /// void ISubscriptionBuilder.Configure( JustSayingBus bus, @@ -80,7 +91,12 @@ void ISubscriptionBuilder.Configure( attachedQueueConfig.SubscriptionGroupName ??= queue.QueueName; attachedQueueConfig.Validate(); - bus.AddQueue(attachedQueueConfig.SubscriptionGroupName, queue); + var serializer = MessageBodySerializer ?? bus.MessageBodySerializerFactory.GetSerializer(); + var compressionRegistry = bus.CompressionRegistry; + var messageConverter = new ReceivedMessageConverter(serializer, compressionRegistry, attachedQueueConfig.RawMessageDelivery); + var sqsSource = new SqsSource { SqsQueue = queue, MessageConverter = messageConverter }; + + bus.AddQueue(attachedQueueConfig.SubscriptionGroupName, sqsSource); logger.LogInformation( "Created SQS queue subscription for '{MessageType}' on '{QueueName}'", diff --git a/src/JustSaying/Fluent/QueuePublicationBuilder`1.cs b/src/JustSaying/Fluent/QueuePublicationBuilder`1.cs index 8bc4eacab..e4d62ccb5 100644 --- a/src/JustSaying/Fluent/QueuePublicationBuilder`1.cs +++ b/src/JustSaying/Fluent/QueuePublicationBuilder`1.cs @@ -2,6 +2,7 @@ using JustSaying.AwsTools; using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.QueueCreation; +using JustSaying.Messaging; using JustSaying.Models; using Microsoft.Extensions.Logging; @@ -99,14 +100,17 @@ void IPublicationBuilder.Configure( ConfigureWrites?.Invoke(writeConfiguration); writeConfiguration.ApplyQueueNamingConvention(config.QueueNamingConvention); - bus.SerializationRegister.AddSerializer(); - var regionEndpoint = RegionEndpoint.GetBySystemName(region); var sqsClient = proxy.GetAwsClientFactory().GetSqsClient(regionEndpoint); + var compressionRegistry = bus.CompressionRegistry; + var compressionOptions = writeConfiguration.CompressionOptions; + var subjectProvider = bus.Config.MessageSubjectProvider; + var subject = subjectProvider.GetSubjectForType(typeof(T)); + var eventPublisher = new SqsMessagePublisher( sqsClient, - bus.SerializationRegister, + new PublishMessageConverter(PublishDestinationType.Queue, bus.MessageBodySerializerFactory.GetSerializer(), compressionRegistry, compressionOptions, subject, writeConfiguration.IsRawMessage), loggerFactory) { MessageResponseLogger = config.MessageResponseLogger diff --git a/src/JustSaying/Fluent/QueueSubscriptionBuilder`1.cs b/src/JustSaying/Fluent/QueueSubscriptionBuilder`1.cs index 84cb978e6..80919f3d7 100644 --- a/src/JustSaying/Fluent/QueueSubscriptionBuilder`1.cs +++ b/src/JustSaying/Fluent/QueueSubscriptionBuilder`1.cs @@ -1,5 +1,8 @@ using JustSaying.AwsTools; using JustSaying.AwsTools.QueueCreation; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Models; using JustSaying.Naming; @@ -184,7 +187,9 @@ void ISubscriptionBuilder.Configure( var queue = creator.EnsureQueueExists(region, subscriptionConfig); bus.AddStartupTask(queue.StartupTask); - bus.AddQueue(subscriptionConfig.SubscriptionGroupName, queue.Queue); + var serializer = bus.MessageBodySerializerFactory.GetSerializer(); + var compressionRegistry = bus.CompressionRegistry; + bus.AddQueue(subscriptionConfig.SubscriptionGroupName, new SqsSource { MessageConverter = new ReceivedMessageConverter(serializer, compressionRegistry, subscriptionConfig.RawMessageDelivery), SqsQueue = queue.Queue }); logger.LogInformation( "Created SQS subscriber for message type '{MessageType}' on queue '{QueueName}'.", diff --git a/src/JustSaying/Fluent/ServiceResolver/DefaultServiceResolver.cs b/src/JustSaying/Fluent/ServiceResolver/DefaultServiceResolver.cs index 5b1e8c8d6..b1ab1a126 100644 --- a/src/JustSaying/Fluent/ServiceResolver/DefaultServiceResolver.cs +++ b/src/JustSaying/Fluent/ServiceResolver/DefaultServiceResolver.cs @@ -1,4 +1,5 @@ using JustSaying.AwsTools; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Monitoring; using JustSaying.Naming; @@ -42,15 +43,13 @@ private object TryResolveService(Type desiredType) { return new NullOpMessageMonitor(); } - else if (desiredType == typeof(IMessageSerializationFactory)) + else if (desiredType == typeof(IMessageBodySerializationFactory)) { return new NewtonsoftSerializationFactory(); } - else if (desiredType == typeof(IMessageSerializationRegister)) + else if (desiredType == typeof(MessageCompressionRegistry)) { - return new MessageSerializationRegister( - ResolveService(), - ResolveService()); + return new MessageCompressionRegistry([new GzipMessageBodyCompression()]); } else if (desiredType == typeof(IMessageSubjectProvider)) { @@ -63,4 +62,4 @@ private object TryResolveService(Type desiredType) return null; } -} \ No newline at end of file +} diff --git a/src/JustSaying/Fluent/ServiceResolver/ServiceBuilderServiceResolver.cs b/src/JustSaying/Fluent/ServiceResolver/ServiceBuilderServiceResolver.cs index df06550f2..562e76e98 100644 --- a/src/JustSaying/Fluent/ServiceResolver/ServiceBuilderServiceResolver.cs +++ b/src/JustSaying/Fluent/ServiceResolver/ServiceBuilderServiceResolver.cs @@ -1,7 +1,6 @@ using System.Collections.Concurrent; using JustSaying.AwsTools; using JustSaying.Messaging.MessageHandling; -using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Monitoring; using Microsoft.Extensions.Logging; @@ -42,11 +41,6 @@ private void Build() _serviceLookup[typeof(IMessageMonitor)] = builder.MessageMonitoring(); } - if (builder.SerializationRegister != null) - { - _serviceLookup[typeof(IMessageSerializationRegister)] = builder.SerializationRegister(); - } - if (builder.MessageContextAccessor != null) { _serviceLookup[typeof(IMessageContextAccessor)] = builder.MessageContextAccessor(); diff --git a/src/JustSaying/Fluent/ServicesBuilder.cs b/src/JustSaying/Fluent/ServicesBuilder.cs index 03bfc4cb2..49d85f110 100644 --- a/src/JustSaying/Fluent/ServicesBuilder.cs +++ b/src/JustSaying/Fluent/ServicesBuilder.cs @@ -36,11 +36,6 @@ internal ServicesBuilder(MessagingBusBuilder busBuilder) /// internal Func MessageMonitoring { get; private set; } - /// - /// Gets or sets a delegate to a method to create the to use. - /// - internal Func SerializationRegister { get; private set; } - /// /// Gets or sets a delegate to a method to create the to use. /// @@ -149,4 +144,4 @@ public ServicesBuilder WithMessageContextAccessor(Func MessageContextAccessor = contextAccessor ?? throw new ArgumentNullException(nameof(contextAccessor)); return this; } -} \ No newline at end of file +} diff --git a/src/JustSaying/Fluent/SqsEndpointHelper.cs b/src/JustSaying/Fluent/SqsEndpointHelper.cs new file mode 100644 index 000000000..9b5d637a2 --- /dev/null +++ b/src/JustSaying/Fluent/SqsEndpointHelper.cs @@ -0,0 +1,15 @@ +namespace JustSaying.Fluent; + +internal static class SqsEndpointHelper +{ + public static string GetSqsHostname(string partition, string region) + { + return partition switch + { + "aws-cn" => $"sqs.{region}.amazonaws.com.cn", + "aws-us-gov" => $"sqs.{region}.amazonaws.com", + "aws" => $"sqs.{region}.amazonaws.com", + _ => throw new ArgumentException($"Unknown partition: {partition}", nameof(partition)) + }; + } +} diff --git a/src/JustSaying/Fluent/TopicAddressPublicationBuilder`1.cs b/src/JustSaying/Fluent/TopicAddressPublicationBuilder`1.cs index 2a8430465..e317edfaa 100644 --- a/src/JustSaying/Fluent/TopicAddressPublicationBuilder`1.cs +++ b/src/JustSaying/Fluent/TopicAddressPublicationBuilder`1.cs @@ -1,5 +1,7 @@ using Amazon; using JustSaying.AwsTools; +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging; using JustSaying.Models; using Microsoft.Extensions.Logging; @@ -16,6 +18,8 @@ public sealed class TopicAddressPublicationBuilder : IPublicationBuilder { private readonly TopicAddress _topicAddress; private Func _exceptionHandler; + private PublishCompressionOptions _compressionOptions; + private string _subject; /// /// Initializes a new instance of the class. @@ -42,6 +46,24 @@ public TopicAddressPublicationBuilder WithExceptionHandler(Func + /// Sets the compression options for publishing messages. + /// + /// The compression options to use when publishing messages. + /// The current instance of for method chaining. + /// Thrown when is null. + public TopicAddressPublicationBuilder WithCompression(PublishCompressionOptions compressionOptions) + { + _compressionOptions = compressionOptions ?? throw new ArgumentNullException(nameof(compressionOptions)); + return this; + } + + public TopicAddressPublicationBuilder WithSubject(string subject) + { + _subject = subject; + return this; + } + /// public void Configure(JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFactory loggerFactory) { @@ -49,18 +71,23 @@ public void Configure(JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFa logger.LogInformation("Adding SNS publisher for message type '{MessageType}'", typeof(T)); - var config = bus.Config; var arn = Arn.Parse(_topicAddress.TopicArn); - bus.SerializationRegister.AddSerializer(); + var compressionRegistry = bus.CompressionRegistry; + var compressionOptions = _compressionOptions ?? bus.Config.DefaultCompressionOptions; + var serializer = bus.MessageBodySerializerFactory.GetSerializer(); + var subjectProvider = bus.Config.MessageSubjectProvider; + var subject = _subject ?? subjectProvider.GetSubjectForType(typeof(T)); - var eventPublisher = new TopicAddressPublisher( + var eventPublisher = new SnsMessagePublisher( + _topicAddress.TopicArn, proxy.GetAwsClientFactory().GetSnsClient(RegionEndpoint.GetBySystemName(arn.Region)), + new PublishMessageConverter(PublishDestinationType.Topic, serializer, compressionRegistry, compressionOptions, subject, true), loggerFactory, - config.MessageSubjectProvider, - bus.SerializationRegister, - _exceptionHandler, - _topicAddress); + _exceptionHandler); + + CompressionEncodingValidator.ValidateEncoding(bus.CompressionRegistry, compressionOptions); + bus.AddMessagePublisher(eventPublisher); logger.LogInformation( @@ -68,4 +95,4 @@ public void Configure(JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFa arn.Resource, typeof(T)); } -} \ No newline at end of file +} diff --git a/src/JustSaying/Fluent/TopicAddressPublisher.cs b/src/JustSaying/Fluent/TopicAddressPublisher.cs deleted file mode 100644 index f7b393dbe..000000000 --- a/src/JustSaying/Fluent/TopicAddressPublisher.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Amazon.SimpleNotificationService; -using JustSaying.AwsTools.MessageHandling; -using JustSaying.Messaging.MessageSerialization; -using JustSaying.Models; -using Microsoft.Extensions.Logging; - -namespace JustSaying.Fluent; - -/// -/// An SNS message publisher for a . -/// -internal sealed class TopicAddressPublisher( - IAmazonSimpleNotificationService snsClient, - ILoggerFactory loggerFactory, - IMessageSubjectProvider subjectProvider, - IMessageSerializationRegister serializationRegister, - Func handleException, - TopicAddress topicAddress) : SnsMessagePublisher(topicAddress.TopicArn, snsClient, serializationRegister, loggerFactory, subjectProvider, handleException) -{ -} diff --git a/src/JustSaying/Fluent/TopicPublicationBuilder`1.cs b/src/JustSaying/Fluent/TopicPublicationBuilder`1.cs index 3250bc835..2b5edcb0b 100644 --- a/src/JustSaying/Fluent/TopicPublicationBuilder`1.cs +++ b/src/JustSaying/Fluent/TopicPublicationBuilder`1.cs @@ -171,6 +171,8 @@ void IPublicationBuilder.Configure( var writeConfiguration = new SnsWriteConfiguration(); ConfigureWrites?.Invoke(writeConfiguration); + writeConfiguration.CompressionOptions ??= bus.Config.DefaultCompressionOptions; + CompressionEncodingValidator.ValidateEncoding(bus.CompressionRegistry, writeConfiguration.CompressionOptions); var client = proxy.GetAwsClientFactory().GetSnsClient(RegionEndpoint.GetBySystemName(region)); @@ -188,7 +190,5 @@ StaticPublicationConfiguration BuildConfiguration(string topicName) bus.AddStartupTask(config.StartupTask); bus.AddMessagePublisher(config.Publisher); - - bus.SerializationRegister.AddSerializer(); } } diff --git a/src/JustSaying/Fluent/TopicSubscriptionBuilder`1.cs b/src/JustSaying/Fluent/TopicSubscriptionBuilder`1.cs index 977828070..e57d88c32 100644 --- a/src/JustSaying/Fluent/TopicSubscriptionBuilder`1.cs +++ b/src/JustSaying/Fluent/TopicSubscriptionBuilder`1.cs @@ -1,5 +1,9 @@ using JustSaying.AwsTools; using JustSaying.AwsTools.QueueCreation; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Models; using JustSaying.Naming; @@ -41,7 +45,6 @@ internal TopicSubscriptionBuilder() private Action MiddlewareConfiguration { get; set; } - /// /// Configures that the will create the topic name that should be used. /// @@ -203,7 +206,15 @@ void ISubscriptionBuilder.Configure( subscriptionConfig); bus.AddStartupTask(queueWithStartup.StartupTask); - bus.AddQueue(subscriptionConfig.SubscriptionGroupName, queueWithStartup.Queue); + var compressionRegistry = bus.CompressionRegistry; + var serializer = bus.MessageBodySerializerFactory.GetSerializer(); + + var sqsSource = new SqsSource + { + SqsQueue = queueWithStartup.Queue, + MessageConverter = new ReceivedMessageConverter(serializer, compressionRegistry, subscriptionConfig.RawMessageDelivery) + }; + bus.AddQueue(subscriptionConfig.SubscriptionGroupName, sqsSource); logger.LogInformation( "Created SQS topic subscription on topic '{TopicName}' and queue '{QueueName}'.", diff --git a/src/JustSaying/IMessagingConfig.cs b/src/JustSaying/IMessagingConfig.cs index ea029a05f..e6e559209 100644 --- a/src/JustSaying/IMessagingConfig.cs +++ b/src/JustSaying/IMessagingConfig.cs @@ -1,3 +1,4 @@ +using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging.MessageSerialization; using JustSaying.Naming; @@ -9,5 +10,6 @@ public interface IMessagingConfig : IPublishConfiguration IMessageSubjectProvider MessageSubjectProvider { get; set; } ITopicNamingConvention TopicNamingConvention { get; set; } IQueueNamingConvention QueueNamingConvention { get; set; } + PublishCompressionOptions DefaultCompressionOptions { get; set; } void Validate(); } diff --git a/src/JustSaying/JustSaying.csproj b/src/JustSaying/JustSaying.csproj index edbd7e93b..11e263690 100644 --- a/src/JustSaying/JustSaying.csproj +++ b/src/JustSaying/JustSaying.csproj @@ -10,6 +10,8 @@ + + @@ -23,4 +25,12 @@ + + + + + + + + diff --git a/src/JustSaying/JustSayingBus.cs b/src/JustSaying/JustSayingBus.cs index c5fbc347e..7223a74dc 100644 --- a/src/JustSaying/JustSayingBus.cs +++ b/src/JustSaying/JustSayingBus.cs @@ -1,10 +1,10 @@ using System.Collections.Concurrent; -using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.MessageHandling.Dispatch; using JustSaying.Extensions; using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.Interrogation; using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Monitoring; @@ -34,15 +34,16 @@ public sealed class JustSayingBus : IMessagingBus, IMessagePublisher, IDisposabl private readonly IMessageMonitor _monitor; private ISubscriptionGroup SubscriptionGroups { get; set; } - public IMessageSerializationRegister SerializationRegister { get; } internal MiddlewareMap MiddlewareMap { get; } + internal MessageCompressionRegistry CompressionRegistry { get; } + internal IMessageBodySerializationFactory MessageBodySerializerFactory { get; set; } public Task Completion { get; private set; } - public JustSayingBus( + internal JustSayingBus( IMessagingConfig config, - IMessageSerializationRegister serializationRegister, + IMessageBodySerializationFactory serializationFactory, ILoggerFactory loggerFactory, IMessageMonitor monitor) { @@ -53,8 +54,9 @@ public JustSayingBus( _log = _loggerFactory.CreateLogger("JustSaying"); Config = config; - SerializationRegister = serializationRegister; MiddlewareMap = new MiddlewareMap(); + CompressionRegistry = new MessageCompressionRegistry([new GzipMessageBodyCompression()]); + MessageBodySerializerFactory = serializationFactory; _publishersByType = []; _subscriptionGroupSettings = @@ -62,17 +64,17 @@ public JustSayingBus( _defaultSubscriptionGroupSettings = new SubscriptionGroupSettingsBuilder(); } - public JustSayingBus( + internal JustSayingBus( IMessagingConfig config, - IMessageSerializationRegister serializationRegister, + IMessageBodySerializationFactory serializationFactory, IMessageReceivePauseSignal messageReceivePauseSignal, ILoggerFactory loggerFactory, - IMessageMonitor monitor) : this(config, serializationRegister, loggerFactory, monitor) + IMessageMonitor monitor) : this(config, serializationFactory, loggerFactory, monitor) { _messageReceivePauseSignal = messageReceivePauseSignal; } - public void AddQueue(string subscriptionGroup, ISqsQueue queue) + internal void AddQueue(string subscriptionGroup, SqsSource queue) { if (string.IsNullOrWhiteSpace(subscriptionGroup)) { @@ -108,7 +110,6 @@ public void SetGroupSettings( public void AddMessageMiddleware(string queueName, HandleMessageMiddleware middleware) where T : Message { - SerializationRegister.AddSerializer(); MiddlewareMap.Add(queueName, middleware); } @@ -161,7 +162,6 @@ public async Task StartAsync(CancellationToken stoppingToken) private async Task RunImplAsync(CancellationToken stoppingToken) { var dispatcher = new MessageDispatcher( - SerializationRegister, _monitor, MiddlewareMap, _loggerFactory); diff --git a/src/JustSaying/Messaging/Channels/Context/IQueueMessageContext.cs b/src/JustSaying/Messaging/Channels/Context/IQueueMessageContext.cs index 2a76eafc6..cbfd649dd 100644 --- a/src/JustSaying/Messaging/Channels/Context/IQueueMessageContext.cs +++ b/src/JustSaying/Messaging/Channels/Context/IQueueMessageContext.cs @@ -1,4 +1,5 @@ using Amazon.SQS.Model; +using JustSaying.Messaging.MessageSerialization; namespace JustSaying.Messaging.Channels.Context; @@ -22,4 +23,6 @@ public interface IQueueMessageContext : IMessageVisibilityUpdater, IMessageDelet /// Gets the name of the queue that this message was received from. /// string QueueName { get; } -} \ No newline at end of file + + IReceivedMessageConverter MessageConverter { get; } +} diff --git a/src/JustSaying/Messaging/Channels/Context/QueueMessageContext.cs b/src/JustSaying/Messaging/Channels/Context/QueueMessageContext.cs index 71bfbdad3..a00de5ff9 100644 --- a/src/JustSaying/Messaging/Channels/Context/QueueMessageContext.cs +++ b/src/JustSaying/Messaging/Channels/Context/QueueMessageContext.cs @@ -1,5 +1,6 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.MessageSerialization; namespace JustSaying.Messaging.Channels.Context; @@ -13,10 +14,12 @@ public sealed class QueueMessageContext : IQueueMessageContext ///
/// The to be handled. /// The the message was read from. - internal QueueMessageContext(Message message, SqsQueueReader queueReader) + /// + internal QueueMessageContext(Message message, SqsQueueReader queueReader, IReceivedMessageConverter messageConverter) { Message = message ?? throw new ArgumentNullException(nameof(message)); _queueReader = queueReader ?? throw new ArgumentNullException(nameof(queueReader)); + MessageConverter = messageConverter; } /// @@ -28,6 +31,8 @@ internal QueueMessageContext(Message message, SqsQueueReader queueReader) /// public string QueueName => _queueReader.QueueName; + public IReceivedMessageConverter MessageConverter { get; } + /// public async Task UpdateMessageVisibilityTimeout(TimeSpan visibilityTimeout, CancellationToken cancellationToken) { @@ -39,4 +44,4 @@ public async Task DeleteMessage(CancellationToken cancellationToken) { await _queueReader.DeleteMessageAsync(Message.ReceiptHandle, cancellationToken).ConfigureAwait(false); } -} \ No newline at end of file +} diff --git a/src/JustSaying/Messaging/Channels/Receive/MessageReceiveBuffer.cs b/src/JustSaying/Messaging/Channels/Receive/MessageReceiveBuffer.cs index 5d53c24ea..eba4a9a62 100644 --- a/src/JustSaying/Messaging/Channels/Receive/MessageReceiveBuffer.cs +++ b/src/JustSaying/Messaging/Channels/Receive/MessageReceiveBuffer.cs @@ -1,8 +1,10 @@ using System.Threading.Channels; using Amazon.SQS; using Amazon.SQS.Model; +using JustSaying.AwsTools; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging.Channels.Context; +using JustSaying.Messaging.Channels.SubscriptionGroups; using JustSaying.Messaging.Interrogation; using JustSaying.Messaging.Middleware; using JustSaying.Messaging.Middleware.Receive; @@ -37,7 +39,7 @@ public MessageReceiveBuffer( int bufferSize, TimeSpan readTimeout, TimeSpan sqsWaitTime, - ISqsQueue sqsQueue, + SqsSource sqsSource, MiddlewareBase> sqsMiddleware, IMessageReceivePauseSignal messageReceivePauseSignal, IMessageMonitor monitor, @@ -47,8 +49,8 @@ public MessageReceiveBuffer( _bufferSize = bufferSize; _readTimeout = readTimeout; _sqsWaitTime = sqsWaitTime; - if (sqsQueue == null) throw new ArgumentNullException(nameof(sqsQueue)); - _sqsQueueReader = new SqsQueueReader(sqsQueue); + if (sqsSource == null) throw new ArgumentNullException(nameof(sqsSource)); + _sqsQueueReader = new SqsQueueReader(sqsSource.SqsQueue, sqsSource.MessageConverter); _sqsMiddleware = sqsMiddleware ?? throw new ArgumentNullException(nameof(sqsMiddleware)); _messageReceivePauseSignal = messageReceivePauseSignal; _monitor = monitor ?? throw new ArgumentNullException(nameof(monitor)); @@ -142,8 +144,6 @@ private async Task> GetMessagesAsync(int count, CancellationToken RegionName = _sqsQueueReader.RegionSystemName, }; - _requestMessageAttributeNames.Add("content"); - messages = await _sqsMiddleware.RunAsync(context, async ct => await _sqsQueueReader diff --git a/src/JustSaying/Messaging/Channels/SubscriptionGroups/SqsSource.cs b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SqsSource.cs new file mode 100644 index 000000000..bf0bac587 --- /dev/null +++ b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SqsSource.cs @@ -0,0 +1,9 @@ +using JustSaying.AwsTools.MessageHandling; + +namespace JustSaying.Messaging.Channels.SubscriptionGroups; + +public sealed class SqsSource +{ + public ISqsQueue SqsQueue { get; set; } + public IReceivedMessageConverter MessageConverter { get; set; } +} diff --git a/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupConfigBuilder.cs b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupConfigBuilder.cs index 0107620c4..b906288ee 100644 --- a/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupConfigBuilder.cs +++ b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupConfigBuilder.cs @@ -15,7 +15,7 @@ namespace JustSaying.Messaging.Channels.SubscriptionGroups; /// The name of the subscription group. public class SubscriptionGroupConfigBuilder(string groupName) { - private readonly List _sqsQueues = []; + private readonly List _sqsSources = []; private readonly string _groupName = groupName ?? throw new ArgumentNullException(nameof(groupName)); private int? _bufferSize; @@ -30,10 +30,10 @@ public class SubscriptionGroupConfigBuilder(string groupName) /// /// The queue to be consumed, assumed to already be created and ready. /// This builder object. - public SubscriptionGroupConfigBuilder AddQueue(ISqsQueue sqsQueue) + internal SubscriptionGroupConfigBuilder AddQueue(SqsSource sqsQueue) { if (sqsQueue == null) throw new ArgumentNullException(nameof(sqsQueue)); - _sqsQueues.Add(sqsQueue); + _sqsSources.Add(sqsQueue); return this; } @@ -42,10 +42,10 @@ public SubscriptionGroupConfigBuilder AddQueue(ISqsQueue sqsQueue) /// /// The queues to be consumed, assumed to already be created and ready. /// This builder object. - public SubscriptionGroupConfigBuilder AddQueues(IEnumerable sqsQueues) + internal SubscriptionGroupConfigBuilder AddQueues(IEnumerable sqsQueues) { if (sqsQueues == null) throw new ArgumentNullException(nameof(sqsQueues)); - _sqsQueues.AddRange(sqsQueues); + _sqsSources.AddRange(sqsQueues); return this; } @@ -138,7 +138,7 @@ public SubscriptionGroupSettings Build(SubscriptionGroupSettingsBuilder defaults _receiveMessagesWaitTime ?? defaults.ReceiveMessagesWaitTime, _multiplexerCapacity ?? defaults.MultiplexerCapacity, _prefetch ?? defaults.Prefetch, - _sqsQueues); + _sqsSources); settings.Validate(); diff --git a/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupFactory.cs b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupFactory.cs index bb3dcc5c3..88141aa3b 100644 --- a/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupFactory.cs +++ b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupFactory.cs @@ -15,7 +15,7 @@ namespace JustSaying.Messaging.Channels.SubscriptionGroups; /// /// Builds 's from the various components required. /// -public class SubscriptionGroupFactory : ISubscriptionGroupFactory +internal sealed class SubscriptionGroupFactory : ISubscriptionGroupFactory { private readonly IMessageDispatcher _messageDispatcher; private readonly IMessageReceivePauseSignal _messageReceivePauseSignal; @@ -29,7 +29,7 @@ public class SubscriptionGroupFactory : ISubscriptionGroupFactory /// The to use to dispatch messages. /// The used by the . /// The to use. - public SubscriptionGroupFactory( + private SubscriptionGroupFactory( IMessageDispatcher messageDispatcher, IMessageMonitor monitor, ILoggerFactory loggerFactory) @@ -111,7 +111,7 @@ private List CreateBuffers( var logger = _loggerFactory.CreateLogger(); - foreach (ISqsQueue queue in subscriptionGroupSettings.Queues) + foreach (SqsSource queue in subscriptionGroupSettings.QueueSources) { var buffer = new MessageReceiveBuffer( subscriptionGroupSettings.Prefetch, diff --git a/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupSettings.cs b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupSettings.cs index 7e7bfc5cc..c6ab469a8 100644 --- a/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupSettings.cs +++ b/src/JustSaying/Messaging/Channels/SubscriptionGroups/SubscriptionGroupSettings.cs @@ -16,7 +16,7 @@ internal SubscriptionGroupSettings( TimeSpan receiveMessagesWaitTime, int multiplexerCapacity, int prefetch, - IReadOnlyCollection queues) + IReadOnlyCollection queueSources) { ConcurrencyLimit = concurrencyLimit; BufferSize = bufferSize; @@ -24,7 +24,7 @@ internal SubscriptionGroupSettings( ReceiveMessagesWaitTime = receiveMessagesWaitTime; MultiplexerCapacity = multiplexerCapacity; Prefetch = prefetch; - Queues = queues; + QueueSources = queueSources; Name = name; } @@ -67,5 +67,5 @@ internal SubscriptionGroupSettings( /// /// A collection of to read messages from. /// - public IReadOnlyCollection Queues { get; } + public IReadOnlyCollection QueueSources { get; } } diff --git a/src/JustSaying/Messaging/Compression/ContentEncodings.cs b/src/JustSaying/Messaging/Compression/ContentEncodings.cs new file mode 100644 index 000000000..075371799 --- /dev/null +++ b/src/JustSaying/Messaging/Compression/ContentEncodings.cs @@ -0,0 +1,17 @@ +namespace JustSaying.Messaging.Compression; + +/// +/// Provides constant values for various content encodings used in message body compression. +/// +/// +/// This class contains predefined string constants representing different content encoding schemes. +/// These constants can be used to ensure consistency and avoid typos when specifying +/// content encodings throughout the application. +/// +public static class ContentEncodings +{ + /// + /// Represents the gzip,base64 content encoding. + /// + public const string GzipBase64 = "gzip,base64"; +} diff --git a/src/JustSaying/Messaging/Compression/GzipMessageBodyCompression.cs b/src/JustSaying/Messaging/Compression/GzipMessageBodyCompression.cs new file mode 100644 index 000000000..de48bfb94 --- /dev/null +++ b/src/JustSaying/Messaging/Compression/GzipMessageBodyCompression.cs @@ -0,0 +1,48 @@ +using System.IO.Compression; +using System.Text; + +namespace JustSaying.Messaging.Compression; + +/// +/// Implements GZIP compression and Base64 encoding for message bodies. +/// +public sealed class GzipMessageBodyCompression : IMessageBodyCompression +{ + /// + /// Gets the content encoding identifier for GZIP compression with Base64 encoding. + /// + public string ContentEncoding => ContentEncodings.GzipBase64; + + /// + /// Gets the content encoding identifier for GZIP compression with Base64 encoding. + /// + public string Compress(string messageBody) + { + var contentBytes = Encoding.UTF8.GetBytes(messageBody); + using var compressedStream = new MemoryStream(); + using (var gZipStream = new GZipStream(compressedStream, CompressionMode.Compress)) + { + gZipStream.Write(contentBytes, 0, contentBytes.Length); + } + + return Convert.ToBase64String(compressedStream.ToArray()); + } + + /// + /// Decodes the Base64 string and decompresses the message body using GZIP. + /// + /// The Base64 encoded and compressed message body to decompress. + /// The decompressed message body as a string. + public string Decompress(string messageBody) + { + var compressedBytes = Convert.FromBase64String(messageBody); + using var inputStream = new MemoryStream(compressedBytes); + using var outputStream = new MemoryStream(); + using (var gZipStream = new GZipStream(inputStream, CompressionMode.Decompress)) + { + gZipStream.CopyTo(outputStream); + } + + return Encoding.UTF8.GetString(outputStream.ToArray()); + } +} diff --git a/src/JustSaying/Messaging/Compression/IMessageBodyCompression.cs b/src/JustSaying/Messaging/Compression/IMessageBodyCompression.cs new file mode 100644 index 000000000..c53b1840d --- /dev/null +++ b/src/JustSaying/Messaging/Compression/IMessageBodyCompression.cs @@ -0,0 +1,26 @@ +namespace JustSaying.Messaging.Compression; + +/// +/// Defines the contract for message body compression operations. +/// +public interface IMessageBodyCompression +{ + /// + /// Gets the content encoding identifier for this compression method. + /// + string ContentEncoding { get; } + + /// + /// Compresses the given message body. + /// + /// The message body to compress. + /// The compressed message body as a string. + string Compress(string messageBody); + + /// + /// Decompresses the given message body. + /// + /// The compressed message body to decompress. + /// The decompressed message body as a string. + string Decompress(string messageBody); +} diff --git a/src/JustSaying/Messaging/Compression/MessageCompressionRegistry.cs b/src/JustSaying/Messaging/Compression/MessageCompressionRegistry.cs new file mode 100644 index 000000000..1c200c7be --- /dev/null +++ b/src/JustSaying/Messaging/Compression/MessageCompressionRegistry.cs @@ -0,0 +1,28 @@ +namespace JustSaying.Messaging.Compression; + +/// +/// Implements a registry for message compression methods. +/// +public sealed class MessageCompressionRegistry +{ + private readonly IList _compressions; + + /// + /// Initializes a new instance of the class. + /// + /// A list of available compression methods. + public MessageCompressionRegistry(IList compressions = null) + { + _compressions = compressions ?? []; + } + + /// + /// Retrieves the appropriate compression method based on the content encoding. + /// + /// The content encoding identifier. + /// An instance for the specified encoding, or null if not found. + public IMessageBodyCompression GetCompression(string contentEncoding) + { + return _compressions.FirstOrDefault(x => string.Equals(x.ContentEncoding, contentEncoding, StringComparison.OrdinalIgnoreCase)); + } +} diff --git a/src/JustSaying/Messaging/MessageHandling/MessageAttributes.cs b/src/JustSaying/Messaging/MessageHandling/MessageAttributes.cs index aea001e35..15b6a6c66 100644 --- a/src/JustSaying/Messaging/MessageHandling/MessageAttributes.cs +++ b/src/JustSaying/Messaging/MessageHandling/MessageAttributes.cs @@ -16,4 +16,11 @@ public MessageAttributes() public MessageAttributeValue Get(string value) => _attributes.TryGetValue(value, out MessageAttributeValue result) ? result : null; + + /// + /// Gets all available attribute keys. + /// + /// An of strings representing all attribute keys. + public IReadOnlyCollection GetKeys() + => _attributes.Keys; } diff --git a/src/JustSaying/Messaging/MessageSerialization/GenericMessageSubjectProvider.cs b/src/JustSaying/Messaging/MessageSerialization/GenericMessageSubjectProvider.cs index 0be4d9174..b3e9e9b48 100644 --- a/src/JustSaying/Messaging/MessageSerialization/GenericMessageSubjectProvider.cs +++ b/src/JustSaying/Messaging/MessageSerialization/GenericMessageSubjectProvider.cs @@ -1,4 +1,3 @@ -using System.Reflection; using System.Text.RegularExpressions; using JustSaying.Extensions; @@ -15,7 +14,7 @@ public class GenericMessageSubjectProvider : IMessageSubjectProvider private static IEnumerable Flatten(Type type) { yield return type; - foreach (var inner in type.GetTypeInfo().GetGenericArguments().SelectMany(Flatten)) + foreach (var inner in type.GetGenericArguments().SelectMany(Flatten)) { yield return inner; } diff --git a/src/JustSaying/Messaging/MessageSerialization/IMessageSerialisationRegister.cs b/src/JustSaying/Messaging/MessageSerialization/IMessageSerialisationRegister.cs deleted file mode 100644 index f20f2dd7e..000000000 --- a/src/JustSaying/Messaging/MessageSerialization/IMessageSerialisationRegister.cs +++ /dev/null @@ -1,33 +0,0 @@ -using JustSaying.Messaging.MessageHandling; -using JustSaying.Models; - -namespace JustSaying.Messaging.MessageSerialization; - -public interface IMessageSerializationRegister -{ - /// - /// Deserializes a message. - /// - /// Message must always have Subject and Message properties - /// The and - /// returned from the body of the SQS message. - MessageWithAttributes DeserializeMessage(string body); - - /// - /// Serializes a message for publishing - /// - /// - /// If set to false, then message will be wrapped in extra object with Subject and Message fields, e.g.: - /// new { Subject = message.GetType().Name, Message = serializedMessage }; - /// - /// AWS SNS service adds these automatically, so for publishing to topics don't add these properties - /// - /// The serialized message for publishing. - string Serialize(Message message, bool serializeForSnsPublishing); - - /// - /// Register a serializer for the given type, if one does not already exist. - /// - /// The type to register a serializer for. - void AddSerializer() where T : Message; -} \ No newline at end of file diff --git a/src/JustSaying/Messaging/MessageSerialization/IMessageSerialiser.cs b/src/JustSaying/Messaging/MessageSerialization/IMessageSerialiser.cs index d0f7b10a2..57ff5d149 100644 --- a/src/JustSaying/Messaging/MessageSerialization/IMessageSerialiser.cs +++ b/src/JustSaying/Messaging/MessageSerialization/IMessageSerialiser.cs @@ -1,25 +1,23 @@ -using JustSaying.Messaging.MessageHandling; using JustSaying.Models; namespace JustSaying.Messaging.MessageSerialization; -public interface IMessageSerializer +/// +/// Defines the contract for serializing and deserializing message bodies. +/// +public interface IMessageBodySerializer { - string GetMessageSubject(string sqsMessage); - - MessageAttributes GetMessageAttributes(string message); - - Message Deserialize(string message, Type type); + /// + /// Serializes a message into a string representation. + /// + /// The message to serialize. + /// A string representation of the serialized message. + string Serialize(Message message); /// - /// Serializes a message for publishing + /// Deserializes a string representation back into a message object. /// - /// - /// If set to false, then message will be wrapped in extra object with Subject and Message fields, e.g.: - /// new { Subject = subject, Message = serializedMessage }; - /// - /// AWS SNS service adds these automatically, so for publishing to topics don't add these properties - /// - /// - string Serialize(Message message, bool serializeForSnsPublishing, string subject); -} \ No newline at end of file + /// The string representation of the message to deserialize. + /// The deserialized message object. + Message Deserialize(string message); +} diff --git a/src/JustSaying/Messaging/MessageSerialization/IMessageSerializationFactory.cs b/src/JustSaying/Messaging/MessageSerialization/IMessageSerializationFactory.cs index cad232cea..6bcdbc314 100644 --- a/src/JustSaying/Messaging/MessageSerialization/IMessageSerializationFactory.cs +++ b/src/JustSaying/Messaging/MessageSerialization/IMessageSerializationFactory.cs @@ -2,7 +2,15 @@ namespace JustSaying.Messaging.MessageSerialization; -public interface IMessageSerializationFactory +/// +/// Defines a factory for creating message body serializers. +/// +public interface IMessageBodySerializationFactory { - IMessageSerializer GetSerializer() where T : Message; -} \ No newline at end of file + /// + /// Gets a serializer for messages of type . + /// + /// The type of message for which to get a serializer. Must inherit from . + /// An capable of serializing and deserializing messages of type . + IMessageBodySerializer GetSerializer() where T : Message; +} diff --git a/src/JustSaying/Messaging/MessageSerialization/MessageSerializationRegister.cs b/src/JustSaying/Messaging/MessageSerialization/MessageSerializationRegister.cs deleted file mode 100644 index 3fa3fb4b9..000000000 --- a/src/JustSaying/Messaging/MessageSerialization/MessageSerializationRegister.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Collections.Concurrent; -using JustSaying.Models; - -namespace JustSaying.Messaging.MessageSerialization; - -public class MessageSerializationRegister( - IMessageSubjectProvider messageSubjectProvider, - IMessageSerializationFactory serializationFactory) : IMessageSerializationRegister -{ - private readonly IMessageSubjectProvider _messageSubjectProvider = messageSubjectProvider ?? throw new ArgumentNullException(nameof(messageSubjectProvider)); - private readonly IMessageSerializationFactory _serializationFactory = serializationFactory; - private readonly ConcurrentDictionary> _typeSerializersBySubject = new(StringComparer.OrdinalIgnoreCase); - private readonly HashSet _messageSerializers = new(); - - public void AddSerializer() where T : Message - { - string key = _messageSubjectProvider.GetSubjectForType(typeof(T)); - - var typeSerializer = _typeSerializersBySubject.GetOrAdd(key, - _ => new Lazy( - () => new TypeSerializer(typeof(T), _serializationFactory.GetSerializer()) - ) - ).Value; - - _messageSerializers.Add(typeSerializer.Serializer); - } - - public MessageWithAttributes DeserializeMessage(string body) - { - // TODO Can we remove this loop rather than try each serializer? - foreach (var messageSerializer in _messageSerializers) - { - string messageSubject = messageSerializer.GetMessageSubject(body); // Custom serializer pulls this from cloud event type - - if (string.IsNullOrWhiteSpace(messageSubject)) - { - continue; - } - - if (!_typeSerializersBySubject.TryGetValue(messageSubject, out var lazyTypeSerializer)) - { - continue; - } - - TypeSerializer typeSerializer = lazyTypeSerializer.Value; - var attributes = typeSerializer.Serializer.GetMessageAttributes(body); - var message = typeSerializer.Serializer.Deserialize(body, typeSerializer.Type); - return new MessageWithAttributes(message, attributes); - } - - var exception = new MessageFormatNotSupportedException("Message can not be handled - type undetermined."); - - // Put the message's body into the exception data so anyone catching - // it can inspect it for other purposes, such as for logging. - exception.Data["MessageBody"] = body; - - throw exception; - } - - public string Serialize(Message message, bool serializeForSnsPublishing) - { - var messageType = message.GetType(); - string subject = _messageSubjectProvider.GetSubjectForType(messageType); - - if (!_typeSerializersBySubject.TryGetValue(subject, out var lazyTypeSerializer)) - { - throw new MessageFormatNotSupportedException($"Failed to serialize message of type {messageType} because it is not registered for serialization."); - } - - var typeSerializer = lazyTypeSerializer.Value; - IMessageSerializer messageSerializer = typeSerializer.Serializer; - return messageSerializer.Serialize(message, serializeForSnsPublishing, subject); - } -} diff --git a/src/JustSaying/Messaging/MessageSerialization/NewtonsoftMessageBodySerializer`1.cs b/src/JustSaying/Messaging/MessageSerialization/NewtonsoftMessageBodySerializer`1.cs new file mode 100644 index 000000000..53485b2fe --- /dev/null +++ b/src/JustSaying/Messaging/MessageSerialization/NewtonsoftMessageBodySerializer`1.cs @@ -0,0 +1,61 @@ +using JustSaying.Models; +using Newtonsoft.Json; + +namespace JustSaying.Messaging.MessageSerialization; + +/// +/// Provides serialization and deserialization functionality for messages of type using Newtonsoft.Json. +/// +/// The type of message to be serialized or deserialized. Must inherit from . +public sealed class NewtonsoftMessageBodySerializer : IMessageBodySerializer where T: Message +{ + private readonly JsonSerializerSettings _settings; + + /// + /// Initializes a new instance of the class with default JSON serializer settings. + /// + /// + /// Default settings include: + /// + /// Ignoring null values when serializing. + /// Using a for enum serialization. + /// + /// + public NewtonsoftMessageBodySerializer() + { + _settings = new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + Converters = [new Newtonsoft.Json.Converters.StringEnumConverter()] + }; + } + + /// + /// Initializes a new instance of the class with custom JSON serializer settings. + /// + /// The custom to use for serialization and deserialization. + public NewtonsoftMessageBodySerializer(JsonSerializerSettings settings) + { + _settings = settings; + } + + /// + /// Serializes a message to its JSON string representation. + /// + /// The message to serialize. + /// A JSON string representation of the message. + public string Serialize(Message message) + { + return JsonConvert.SerializeObject(message, _settings); + } + + /// + /// Deserializes a JSON string to a message of type . + /// + /// The JSON string to deserialize. + /// A deserialized message of type . + public Message Deserialize(string message) + { + return JsonConvert.DeserializeObject(message, _settings); + } +} diff --git a/src/JustSaying/Messaging/MessageSerialization/NewtonsoftSerializationFactory.cs b/src/JustSaying/Messaging/MessageSerialization/NewtonsoftSerializationFactory.cs index da7ebbe97..c44e05ca1 100644 --- a/src/JustSaying/Messaging/MessageSerialization/NewtonsoftSerializationFactory.cs +++ b/src/JustSaying/Messaging/MessageSerialization/NewtonsoftSerializationFactory.cs @@ -1,16 +1,12 @@ +using System.Collections.Concurrent; using JustSaying.Models; using Newtonsoft.Json; namespace JustSaying.Messaging.MessageSerialization; -public class NewtonsoftSerializationFactory(JsonSerializerSettings settings) : IMessageSerializationFactory +public sealed class NewtonsoftSerializationFactory(JsonSerializerSettings settings = null) : IMessageBodySerializationFactory { - private readonly NewtonsoftSerializer _serializer = new(settings); + private readonly ConcurrentDictionary _cache = new(); - public NewtonsoftSerializationFactory() - : this(null) - { - } - - public IMessageSerializer GetSerializer() where T : Message => _serializer; + public IMessageBodySerializer GetSerializer() where T : Message => (IMessageBodySerializer)_cache.GetOrAdd(typeof(T), _ => new NewtonsoftMessageBodySerializer(settings)); } diff --git a/src/JustSaying/Messaging/MessageSerialization/NewtonsoftSerializer.cs b/src/JustSaying/Messaging/MessageSerialization/NewtonsoftSerializer.cs deleted file mode 100644 index 68c5b5d25..000000000 --- a/src/JustSaying/Messaging/MessageSerialization/NewtonsoftSerializer.cs +++ /dev/null @@ -1,91 +0,0 @@ -using JustSaying.Messaging.MessageHandling; -using JustSaying.Models; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace JustSaying.Messaging.MessageSerialization; - -public class NewtonsoftSerializer : IMessageSerializer -{ - private readonly JsonSerializerSettings _settings; - - public NewtonsoftSerializer() - : this(null) - { - } - - public NewtonsoftSerializer(JsonSerializerSettings settings) - { - settings ??= new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore, - Converters = new JsonConverter[] { new Newtonsoft.Json.Converters.StringEnumConverter() } - }; - - _settings = settings; - } - - public Message Deserialize(string message, Type type) - { - var document = JObject.Parse(message); - string json = document["Message"].ToString(); - - return (Message)JsonConvert.DeserializeObject(json, type, _settings); - } - - public string Serialize(Message message, bool serializeForSnsPublishing, string subject) - { - var json = JsonConvert.SerializeObject(message, _settings); - - // AWS SNS service will add Subject and Message properties automatically, - // so just return plain message - if (serializeForSnsPublishing) - { - return json; - } - - // For direct publishing to SQS, add Subject and Message properties manually - var context = new { Subject = subject, Message = json }; - return JsonConvert.SerializeObject(context, _settings); - } - - public MessageAttributes GetMessageAttributes(string message) - { - var props = JObject.Parse(message).Value("MessageAttributes")?.Properties(); - if (props == null) - { - return new MessageAttributes(); - } - - var dict = new Dictionary(); - - foreach (var prop in props) - { - var propData = prop.Value; - if (propData == null) continue; - - var dataType = propData["Type"].ToString(); - var dataValue = propData["Value"].ToString(); - - var isString = dataType == "String"; - - var mav = new MessageAttributeValue - { - DataType = dataType, - StringValue = isString ? dataValue : null, - BinaryValue = !isString ? Convert.FromBase64String(dataValue) : null - }; - dict.Add(prop.Name, mav); - } - - return new MessageAttributes(dict); - } - - public string GetMessageSubject(string sqsMessage) - { - if (string.IsNullOrWhiteSpace(sqsMessage)) return string.Empty; - - var body = JObject.Parse(sqsMessage); - return body.Value("Subject") ?? string.Empty; - } -} diff --git a/src/JustSaying/Messaging/MessageSerialization/PublishMessage.cs b/src/JustSaying/Messaging/MessageSerialization/PublishMessage.cs new file mode 100644 index 000000000..56762d539 --- /dev/null +++ b/src/JustSaying/Messaging/MessageSerialization/PublishMessage.cs @@ -0,0 +1,22 @@ +namespace JustSaying.Messaging.MessageSerialization; + +public sealed class PublishMessage +{ + public PublishMessage(string body, Dictionary messageAttributes, string subject) + { + Body = body; + MessageAttributes = messageAttributes; + Subject = subject; + } + + public string Body { get; } + public Dictionary MessageAttributes { get; } + public string Subject { get; } + + public void Deconstruct(out string body, out Dictionary attributes, out string subject) + { + body = Body; + attributes = MessageAttributes; + subject = Subject; + } +} diff --git a/src/JustSaying/Messaging/MessageSerialization/MessageWithAttributes.cs b/src/JustSaying/Messaging/MessageSerialization/ReceivedMessage.cs similarity index 68% rename from src/JustSaying/Messaging/MessageSerialization/MessageWithAttributes.cs rename to src/JustSaying/Messaging/MessageSerialization/ReceivedMessage.cs index d57fdaac1..dcfec5d5c 100644 --- a/src/JustSaying/Messaging/MessageSerialization/MessageWithAttributes.cs +++ b/src/JustSaying/Messaging/MessageSerialization/ReceivedMessage.cs @@ -6,7 +6,7 @@ namespace JustSaying.Messaging.MessageSerialization; /// /// Represents a deserialized message with attributes. /// -public class MessageWithAttributes(Message message, MessageAttributes messageAttributes) +public sealed class ReceivedMessage(Message message, MessageAttributes messageAttributes) { /// /// Gets the message that was extracted from a message body. @@ -17,4 +17,10 @@ public class MessageWithAttributes(Message message, MessageAttributes messageAtt /// Gets the attributes that were extracted from a message body. /// public MessageAttributes MessageAttributes { get; } = messageAttributes; + + public void Deconstruct(out Message message, out MessageAttributes attributes) + { + message = Message; + attributes = MessageAttributes; + } } diff --git a/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonMessageBodySerializer.cs b/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonMessageBodySerializer.cs new file mode 100644 index 000000000..3d5505313 --- /dev/null +++ b/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonMessageBodySerializer.cs @@ -0,0 +1,26 @@ +namespace JustSaying.Messaging.MessageSerialization; + +using System.Text.Json; +using System.Text.Json.Serialization; + +public static class SystemTextJsonMessageBodySerializer +{ + /// + /// Gets the default JSON serializer options used by derived serializers. + /// + /// + /// These options include: + /// + /// Ignoring null values when writing JSON. + /// Using a for enum serialization. + /// + /// + public static JsonSerializerOptions DefaultJsonSerializerOptions { get; } = new() + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + Converters = + { + new JsonStringEnumConverter(), + }, + }; +} diff --git a/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonMessageBodySerializer`1.cs b/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonMessageBodySerializer`1.cs new file mode 100644 index 000000000..324fa772b --- /dev/null +++ b/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonMessageBodySerializer`1.cs @@ -0,0 +1,42 @@ +using System.Text.Json; +using JustSaying.Models; + +namespace JustSaying.Messaging.MessageSerialization; + +/// +/// Provides serialization and deserialization functionality for messages of type using System.Text.Json. +/// +/// The type of message to be serialized or deserialized. Must inherit from . +public sealed class SystemTextJsonMessageBodySerializer : IMessageBodySerializer where T: Message +{ + private readonly JsonSerializerOptions _options; + + /// + /// Initializes a new instance of the class with custom JSON serializer options. + /// + /// The custom to use for serialization and deserialization. + public SystemTextJsonMessageBodySerializer(JsonSerializerOptions options) + { + _options = options; + } + + /// + /// Serializes a message to its JSON string representation. + /// + /// The message to serialize. + /// A JSON string representation of the message. + public string Serialize(Message message) + { + return JsonSerializer.Serialize(message, message.GetType(), _options); + } + + /// + /// Deserializes a JSON string to a message of type . + /// + /// The JSON string to deserialize. + /// A deserialized message of type . + public Message Deserialize(string messageBody) + { + return JsonSerializer.Deserialize(messageBody, _options); + } +} diff --git a/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonSerializationFactory.cs b/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonSerializationFactory.cs deleted file mode 100644 index 023957b78..000000000 --- a/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonSerializationFactory.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Text.Json; -using JustSaying.Models; - -namespace JustSaying.Messaging.MessageSerialization; - -public class SystemTextJsonSerializationFactory(JsonSerializerOptions options) : IMessageSerializationFactory -{ - private readonly SystemTextJsonSerializer _serializer = new(options); - - public SystemTextJsonSerializationFactory() - : this(null) - { - } - - public IMessageSerializer GetSerializer() where T : Message => _serializer; -} diff --git a/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonSerializer.cs b/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonSerializer.cs deleted file mode 100644 index 9d124fcba..000000000 --- a/src/JustSaying/Messaging/MessageSerialization/SystemTextJsonSerializer.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using JustSaying.Messaging.MessageHandling; -using JustSaying.Models; - -namespace JustSaying.Messaging.MessageSerialization; - -/// -/// A class representing an implementation of for the System.Text.Json serializer. -/// -public class SystemTextJsonSerializer : IMessageSerializer -{ - private static readonly JsonSerializerOptions DefaultJsonSerializerOptions = new() - { -#if NET8_0_OR_GREATER - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, -#else - IgnoreNullValues = true, -#endif - Converters = - { - new JsonStringEnumConverter(), - }, - }; - - private readonly JsonSerializerOptions _options; - - /// - /// Initializes a new instance of the class. - /// - public SystemTextJsonSerializer() - : this(null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The optional to use. - public SystemTextJsonSerializer(JsonSerializerOptions options) - { - _options = options ?? DefaultJsonSerializerOptions; - } - - /// - public string GetMessageSubject(string sqsMessage) - { - using var body = JsonDocument.Parse(sqsMessage); - string subject = string.Empty; - - if (body.RootElement.TryGetProperty("Subject", out var value)) - { - subject = value.GetString() ?? string.Empty; - } - - return subject; - } - - public MessageAttributes GetMessageAttributes(string message) - { - var jsonDocument = JsonDocument.Parse(message); - - if (!jsonDocument.RootElement.TryGetProperty("MessageAttributes", out var attributesElement)) - { - return new MessageAttributes(); - } - - var attributes = new Dictionary(); - foreach(var obj in attributesElement.EnumerateObject()) - { - var dataType = obj.Value.GetProperty("Type").GetString(); - var dataValue = obj.Value.GetProperty("Value").GetString(); - - var isString = dataType == "String"; - - attributes.Add(obj.Name, new MessageAttributeValue() - { - DataType = dataType, - StringValue = isString ? dataValue : null, - BinaryValue = !isString ? Convert.FromBase64String(dataValue) : null - }); - } - - return new MessageAttributes(attributes); - } - - /// - public Message Deserialize(string message, Type type) - { - using var document = JsonDocument.Parse(message); - JsonElement element = document.RootElement.GetProperty("Message"); - string json = element.ToString(); - - return (Message)JsonSerializer.Deserialize(json, type, _options); - } - - /// - public string Serialize(Message message, bool serializeForSnsPublishing, string subject) - { - string json = JsonSerializer.Serialize(message, message.GetType(), _options); - - // AWS SNS service will add Subject and Message properties automatically, - // so just return plain message - if (serializeForSnsPublishing) - { - return json; - } - - // For direct publishing to SQS, add Subject and Message properties manually - var context = new { Subject = subject, Message = json }; - return JsonSerializer.Serialize(context, _options); - } -} diff --git a/src/JustSaying/Messaging/MessageSerialization/TypeSerializer.cs b/src/JustSaying/Messaging/MessageSerialization/TypeSerializer.cs deleted file mode 100644 index 6f116d7b9..000000000 --- a/src/JustSaying/Messaging/MessageSerialization/TypeSerializer.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace JustSaying.Messaging.MessageSerialization; - -public class TypeSerializer(Type type, IMessageSerializer serializer) -{ - public Type Type { get; private set; } = type; - public IMessageSerializer Serializer { get; private set; } = serializer; -} diff --git a/src/JustSaying/Messaging/Middleware/Handle/HandlerMiddlewareBuilder.cs b/src/JustSaying/Messaging/Middleware/Handle/HandlerMiddlewareBuilder.cs index 77c07c11b..7cbaafe9d 100644 --- a/src/JustSaying/Messaging/Middleware/Handle/HandlerMiddlewareBuilder.cs +++ b/src/JustSaying/Messaging/Middleware/Handle/HandlerMiddlewareBuilder.cs @@ -108,7 +108,6 @@ public HandlerMiddlewareBuilder UseHandler() where TMessage : Message /// An that customises /// the pipeline. /// - public HandlerMiddlewareBuilder Configure( Action configure) { diff --git a/src/JustSaying/Messaging/PublishMetadata.cs b/src/JustSaying/Messaging/PublishMetadata.cs index cde53e33a..b1b499fbf 100644 --- a/src/JustSaying/Messaging/PublishMetadata.cs +++ b/src/JustSaying/Messaging/PublishMetadata.cs @@ -16,7 +16,7 @@ public PublishMetadata AddMessageAttribute(string key, IReadOnlyCollection DataType = "Binary" }; - MessageAttributes[key] = mav; + AddMessageAttribute(key, mav); return this; } diff --git a/src/JustSaying/MessagingBusBuilder.cs b/src/JustSaying/MessagingBusBuilder.cs index b7b77c52e..0cf4e64bd 100644 --- a/src/JustSaying/MessagingBusBuilder.cs +++ b/src/JustSaying/MessagingBusBuilder.cs @@ -254,11 +254,11 @@ public IMessagingBus BuildSubscribers() private JustSayingBus CreateBus(IMessagingConfig config, ILoggerFactory loggerFactory) { - IMessageSerializationRegister register = ServiceResolver.ResolveService(); + IMessageBodySerializationFactory serializationFactory = ServiceResolver.ResolveService(); IMessageReceivePauseSignal messageReceivePauseSignal = ServiceResolver.ResolveService(); IMessageMonitor monitor = ServiceResolver.ResolveOptionalService() ?? new NullOpMessageMonitor(); - var bus = new JustSayingBus(config, register, messageReceivePauseSignal, loggerFactory, monitor); + var bus = new JustSayingBus(config, serializationFactory, messageReceivePauseSignal, loggerFactory, monitor); return bus; } diff --git a/src/JustSaying/MessagingConfig.cs b/src/JustSaying/MessagingConfig.cs index f69ea8454..41395e257 100644 --- a/src/JustSaying/MessagingConfig.cs +++ b/src/JustSaying/MessagingConfig.cs @@ -16,6 +16,7 @@ public MessagingConfig() MessageSubjectProvider = new NonGenericMessageSubjectProvider(); TopicNamingConvention = new DefaultNamingConventions(); QueueNamingConvention = new DefaultNamingConventions(); + DefaultCompressionOptions = new PublishCompressionOptions(); } public int PublishFailureReAttempts { get; set; } @@ -26,6 +27,7 @@ public MessagingConfig() public IMessageSubjectProvider MessageSubjectProvider { get; set; } public ITopicNamingConvention TopicNamingConvention { get; set; } public IQueueNamingConvention QueueNamingConvention { get; set; } + public PublishCompressionOptions DefaultCompressionOptions { get; set; } public virtual void Validate() { @@ -34,4 +36,4 @@ public virtual void Validate() throw new InvalidOperationException($"Config cannot have a null for the {nameof(MessageSubjectProvider)} property."); } } -} \ No newline at end of file +} diff --git a/src/JustSaying/Naming/DefaultNamingConventions.cs b/src/JustSaying/Naming/DefaultNamingConventions.cs index 8eb9fbd89..e89245021 100644 --- a/src/JustSaying/Naming/DefaultNamingConventions.cs +++ b/src/JustSaying/Naming/DefaultNamingConventions.cs @@ -51,7 +51,7 @@ private static string GetTypeFriendlyName(Type type) return friendlyName; } - if (type.GetTypeInfo().IsGenericType) + if (type.IsGenericType) { var indexOfBacktick = friendlyName.IndexOf('`'); diff --git a/src/JustSaying/PublicAPI/PublicAPI.Shipped.txt b/src/JustSaying/PublicAPI/PublicAPI.Shipped.txt new file mode 100644 index 000000000..94c03c7aa --- /dev/null +++ b/src/JustSaying/PublicAPI/PublicAPI.Shipped.txt @@ -0,0 +1,736 @@ +abstract JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary +abstract JustSaying.Messaging.Middleware.MiddlewareBase.RunInnerAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +const JustSaying.AwsTools.JustSayingConstants.AttributeArn = "QueueArn" -> string +const JustSaying.AwsTools.JustSayingConstants.AttributeDeliveryDelay = "DelaySeconds" -> string +const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyId = "KmsMasterKeyId" -> string +const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyReusePeriodSecondId = "KmsDataKeyReusePeriodSeconds" -> string +const JustSaying.AwsTools.JustSayingConstants.AttributePolicy = "Policy" -> string +const JustSaying.AwsTools.JustSayingConstants.AttributeRedrivePolicy = "RedrivePolicy" -> string +const JustSaying.AwsTools.JustSayingConstants.AttributeRetentionPeriod = "MessageRetentionPeriod" -> string +const JustSaying.AwsTools.JustSayingConstants.AttributeVisibilityTimeout = "VisibilityTimeout" -> string +JustSaying.AwsTools.AwsClientFactoryProxy +JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy() -> void +JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Func awsClientFactoryFunc) -> void +JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Lazy factory) -> void +JustSaying.AwsTools.AwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory +JustSaying.AwsTools.AwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void +JustSaying.AwsTools.DefaultAwsClientFactory +JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory() -> void +JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory(Amazon.Runtime.AWSCredentials customCredentials) -> void +JustSaying.AwsTools.DefaultAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService +JustSaying.AwsTools.DefaultAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS +JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.get -> System.Uri +JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.set -> void +JustSaying.AwsTools.ErrorQueue +JustSaying.AwsTools.ErrorQueue.ErrorQueue(Amazon.RegionEndpoint region, string sourceQueueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.IAwsClientFactory +JustSaying.AwsTools.IAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService +JustSaying.AwsTools.IAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS +JustSaying.AwsTools.IAwsClientFactoryProxy +JustSaying.AwsTools.IAwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory +JustSaying.AwsTools.IAwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void +JustSaying.AwsTools.JustSayingConstants +JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher +JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher +JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.MessageDispatcher(JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Monitoring.IMessageMonitor messagingMonitor, JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap middlewareMap, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap +JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Add(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap +JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Contains(string queueName, System.Type messageType) -> bool +JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Get(string queueName, System.Type messageType) -> JustSaying.Messaging.Middleware.MiddlewareBase +JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.MiddlewareMap() -> void +JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Types.get -> System.Collections.Generic.IEnumerable +JustSaying.AwsTools.MessageHandling.ISqsQueue +JustSaying.AwsTools.MessageHandling.ISqsQueue.Arn.get -> string +JustSaying.AwsTools.MessageHandling.ISqsQueue.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.ISqsQueue.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.ISqsQueue.QueueName.get -> string +JustSaying.AwsTools.MessageHandling.ISqsQueue.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> +JustSaying.AwsTools.MessageHandling.ISqsQueue.RegionSystemName.get -> string +JustSaying.AwsTools.MessageHandling.ISqsQueue.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.ISqsQueue.Uri.get -> System.Uri +JustSaying.AwsTools.MessageHandling.MessageResponse +JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.get -> System.Net.HttpStatusCode? +JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.set -> void +JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.get -> string +JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.set -> void +JustSaying.AwsTools.MessageHandling.MessageResponse.MessageResponse() -> void +JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.get -> Amazon.Runtime.ResponseMetadata +JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.set -> void +JustSaying.AwsTools.MessageHandling.PublishException +JustSaying.AwsTools.MessageHandling.PublishException.PublishException() -> void +JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message) -> void +JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message, System.Exception inner) -> void +JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup +JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.Queue.get -> JustSaying.AwsTools.MessageHandling.ISqsQueue +JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void +JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(System.Func startupTask, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void +JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.StartupTask.get -> System.Func +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Arn.get -> string +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Client.get -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.get -> System.Action +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.set -> void +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(string topicArn, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void +JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsTopicByName +JustSaying.AwsTools.MessageHandling.SnsTopicByName.ApplyTagsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsTopicByName.Arn.get -> string +JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateWithEncryptionAsync(JustSaying.AwsTools.QueueCreation.ServerSideEncryption config, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsTopicByName.EnsurePolicyIsUpdatedAsync(System.Collections.Generic.IReadOnlyCollection additionalSubscriberAccounts) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsTopicByName.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SnsTopicByName.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +JustSaying.AwsTools.MessageHandling.SnsTopicByName.SnsTopicByName(string topicName, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.get -> System.Collections.Generic.IDictionary +JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.set -> void +JustSaying.AwsTools.MessageHandling.SnsTopicByName.TopicName.get -> string +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.GetMessageInContext(JustSaying.Models.Message message) -> string +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.get -> System.Action +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.set -> void +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.QueueUrl.get -> System.Uri +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(System.Uri queueUrl, Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SqsQueueByName +JustSaying.AwsTools.MessageHandling.SqsQueueByName.EnsureQueueAndErrorQueueExistAndAllAttributesAreUpdatedAsync(JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SqsQueueByName.SqsQueueByName(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, int retryCountBeforeSendingToErrorQueue, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Arn.get -> string +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Client.get -> Amazon.SQS.IAmazonSQS +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Logger.get -> Microsoft.Extensions.Logging.ILogger +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueName.get -> string +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.RegionSystemName.get -> string +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.SqsQueueByNameBase(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Uri.get -> System.Uri +JustSaying.AwsTools.QueueCreation.AmazonQueueCreator +JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.AmazonQueueCreator(JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup +JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup +JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException +JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException() -> void +JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message) -> void +JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message, System.Exception inner) -> void +JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues +JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup +JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup +JustSaying.AwsTools.QueueCreation.ServerSideEncryption +JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.get -> System.TimeSpan +JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.set -> void +JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.get -> string +JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.set -> void +JustSaying.AwsTools.QueueCreation.ServerSideEncryption.ServerSideEncryption() -> void +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.set -> void +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.get -> System.Func +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.set -> void +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.SnsWriteConfiguration() -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ApplyQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.get -> System.TimeSpan +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.get -> bool +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.get -> System.TimeSpan +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.get -> System.TimeSpan +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.get -> string +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.get -> int +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.SqsBasicConfiguration() -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.Validate() -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.get -> System.TimeSpan +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.set -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.ApplyTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.get -> string +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.set -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.get -> string +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.set -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SqsReadConfiguration(JustSaying.AwsTools.QueueCreation.SubscriptionType subscriptionType) -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.get -> string +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.set -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionType.get -> JustSaying.AwsTools.QueueCreation.SubscriptionType +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.get -> System.Collections.Generic.Dictionary +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.set -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.get -> string +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.set -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.get -> string +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.set -> void +JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration +JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration.SqsWriteConfiguration() -> void +JustSaying.AwsTools.QueueCreation.SubscriptionType +JustSaying.AwsTools.QueueCreation.SubscriptionType.PointToPoint = 1 -> JustSaying.AwsTools.QueueCreation.SubscriptionType +JustSaying.AwsTools.QueueCreation.SubscriptionType.ToTopic = 0 -> JustSaying.AwsTools.QueueCreation.SubscriptionType +JustSaying.Extensions.ChannelExtensions +JustSaying.Fluent.AccountAddressProvider +JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint) -> void +JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void +JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName) -> void +JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void +JustSaying.Fluent.AccountAddressProvider.GetQueueUri(string queueName) -> System.Uri +JustSaying.Fluent.AccountAddressProvider.GetQueueUriByConvention() -> System.Uri +JustSaying.Fluent.AccountAddressProvider.GetTopicArn(string topicName) -> string +JustSaying.Fluent.AccountAddressProvider.GetTopicArnByConvention() -> string +JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.Build() -> JustSaying.AwsTools.IAwsClientFactory +JustSaying.Fluent.AwsClientFactoryBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.WithAnonymousCredentials() -> JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.WithBasicCredentials(string accessKey, string secretKey) -> JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.WithClientFactory(System.Func clientFactory) -> JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.WithCredentials(Amazon.Runtime.AWSCredentials credentials) -> JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUri(System.Uri uri) -> JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUrl(string url) -> JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.AwsClientFactoryBuilder.WithSessionCredentials(string accessKeyId, string secretAccessKey, string token) -> JustSaying.Fluent.AwsClientFactoryBuilder +JustSaying.Fluent.IMessageBusConfigurationContributor +JustSaying.Fluent.IMessageBusConfigurationContributor.Configure(JustSaying.MessagingBusBuilder builder) -> void +JustSaying.Fluent.IServiceResolver +JustSaying.Fluent.IServiceResolver.ResolveOptionalService() -> T +JustSaying.Fluent.IServiceResolver.ResolveService() -> T +JustSaying.Fluent.ISubscriptionBuilder +JustSaying.Fluent.ISubscriptionBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver, JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues creator, JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactoryProxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.Fluent.ISubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder +JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.Build() -> JustSaying.IMessagingConfig +JustSaying.Fluent.MessagingConfigurationBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccount(string accountId) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(params string[] regions) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(System.Collections.Generic.IEnumerable accountIds) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageResponseLogger(System.Action logger) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageSubjectProvider(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider subjectProvider) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureBackoff(System.TimeSpan value) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureReattempts(int value) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(Amazon.RegionEndpoint region) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(string region) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder +JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithQueue() -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithQueue(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithQueueArn(string queueArn) -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithQueueUri(System.Uri queueUrl) -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithQueueUrl(string queueUrl) -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithTopic() -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithTopic(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.PublicationsBuilder.WithTopicArn(string topicArn, System.Action> configure = null) -> JustSaying.Fluent.PublicationsBuilder +JustSaying.Fluent.QueueAddressConfiguration +JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.get -> System.Action +JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.set -> void +JustSaying.Fluent.QueueAddressConfiguration.QueueAddressConfiguration() -> void +JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.get -> string +JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.set -> void +JustSaying.Fluent.QueueAddressConfiguration.Validate() -> void +JustSaying.Fluent.QueueAddressPublicationBuilder +JustSaying.Fluent.QueueAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.Fluent.QueueAddressSubscriptionBuilder +JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder +JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueAddressSubscriptionBuilder +JustSaying.Fluent.QueuePublicationBuilder +JustSaying.Fluent.QueuePublicationBuilder.WithName(string queueName) -> JustSaying.Fluent.QueuePublicationBuilder +JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder +JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder +JustSaying.Fluent.QueueSubscriptionBuilder +JustSaying.Fluent.QueueSubscriptionBuilder.WithDefaultQueue() -> JustSaying.Fluent.QueueSubscriptionBuilder +JustSaying.Fluent.QueueSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder +JustSaying.Fluent.QueueSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.QueueSubscriptionBuilder +JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder +JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder +JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.QueueSubscriptionBuilder +JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.QueueSubscriptionBuilder +JustSaying.Fluent.ServicesBuilder +JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(JustSaying.IHandlerResolver handlerResolver) -> JustSaying.Fluent.ServicesBuilder +JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(System.Func handlerResolver) -> JustSaying.Fluent.ServicesBuilder +JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> JustSaying.Fluent.ServicesBuilder +JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(System.Func loggerFactory) -> JustSaying.Fluent.ServicesBuilder +JustSaying.Fluent.ServicesBuilder.WithMessageContextAccessor(System.Func contextAccessor) -> JustSaying.Fluent.ServicesBuilder +JustSaying.Fluent.ServicesBuilder.WithMessageMonitoring(System.Func monitoring) -> JustSaying.Fluent.ServicesBuilder +JustSaying.Fluent.SnsWriteConfigurationBuilder +JustSaying.Fluent.SnsWriteConfigurationBuilder.SnsWriteConfigurationBuilder() -> void +JustSaying.Fluent.SnsWriteConfigurationBuilder.WithErrorHandler(System.Func handler) -> JustSaying.Fluent.SnsWriteConfigurationBuilder +JustSaying.Fluent.SqsConfigurationBuilder +JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(JustSaying.AwsTools.QueueCreation.ServerSideEncryption encryption) -> TBuilder +JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(string masterKeyId) -> TBuilder +JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueue() -> TBuilder +JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueueOptOut(bool value) -> TBuilder +JustSaying.Fluent.SqsConfigurationBuilder.WithMessageRetention(System.TimeSpan value) -> TBuilder +JustSaying.Fluent.SqsConfigurationBuilder.WithNoErrorQueue() -> TBuilder +JustSaying.Fluent.SqsConfigurationBuilder.WithVisibilityTimeout(System.TimeSpan value) -> TBuilder +JustSaying.Fluent.SqsReadConfigurationBuilder +JustSaying.Fluent.SqsReadConfigurationBuilder.SqsReadConfigurationBuilder() -> void +JustSaying.Fluent.SqsReadConfigurationBuilder.WithSubscriptionGroup(string subscriptionGroupName) -> JustSaying.Fluent.SqsReadConfigurationBuilder +JustSaying.Fluent.SqsReadConfigurationBuilder.WithTopicSourceAccount(string id) -> JustSaying.Fluent.SqsReadConfigurationBuilder +JustSaying.Fluent.SqsWriteConfigurationBuilder +JustSaying.Fluent.SqsWriteConfigurationBuilder.SqsWriteConfigurationBuilder() -> void +JustSaying.Fluent.SqsWriteConfigurationBuilder.WithQueueName(string name) -> JustSaying.Fluent.SqsWriteConfigurationBuilder +JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForQueue() -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForQueue(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForQueueArn(string queueArn, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForQueueUri(System.Uri queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForQueueUrl(string queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForTopic() -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForTopic(string topicNameOverride, System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.ForTopic(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.WithDefaults(System.Action configure) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.SubscriptionsBuilder.WithSubscriptionGroup(string groupName, System.Action action) -> JustSaying.Fluent.SubscriptionsBuilder +JustSaying.Fluent.TopicAddressPublicationBuilder +JustSaying.Fluent.TopicAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.Fluent.TopicAddressPublicationBuilder.WithExceptionHandler(System.Func exceptionHandler) -> JustSaying.Fluent.TopicAddressPublicationBuilder +JustSaying.Fluent.TopicPublicationBuilder +JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.get -> System.Func +JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.set -> void +JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key) -> JustSaying.Fluent.TopicPublicationBuilder +JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicPublicationBuilder +JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicPublicationBuilder +JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(System.Func topicNameCustomizer) -> JustSaying.Fluent.TopicPublicationBuilder +JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder +JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder +JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.IntoDefaultTopic() -> JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.Fluent.TopicSubscriptionBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder +JustSaying.HandlerNotRegisteredWithContainerException +JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException() -> void +JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message) -> void +JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message, System.Exception inner) -> void +JustSaying.HandlerResolutionContext +JustSaying.HandlerResolutionContext.HandlerResolutionContext(string queueName) -> void +JustSaying.HandlerResolutionContext.QueueName.get -> string +JustSaying.IHandlerResolver +JustSaying.IHandlerResolver.ResolveHandler(JustSaying.HandlerResolutionContext context) -> JustSaying.Messaging.MessageHandling.IHandlerAsync +JustSaying.IMessagingBus +JustSaying.IMessagingConfig +JustSaying.IMessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider +JustSaying.IMessagingConfig.MessageSubjectProvider.set -> void +JustSaying.IMessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention +JustSaying.IMessagingConfig.QueueNamingConvention.set -> void +JustSaying.IMessagingConfig.Region.get -> string +JustSaying.IMessagingConfig.Region.set -> void +JustSaying.IMessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention +JustSaying.IMessagingConfig.TopicNamingConvention.set -> void +JustSaying.IMessagingConfig.Validate() -> void +JustSaying.IPublishConfiguration +JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection +JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.set -> void +JustSaying.IPublishConfiguration.MessageResponseLogger.get -> System.Action +JustSaying.IPublishConfiguration.MessageResponseLogger.set -> void +JustSaying.IPublishConfiguration.PublishFailureBackoff.get -> System.TimeSpan +JustSaying.IPublishConfiguration.PublishFailureBackoff.set -> void +JustSaying.IPublishConfiguration.PublishFailureReAttempts.get -> int +JustSaying.IPublishConfiguration.PublishFailureReAttempts.set -> void +JustSaying.IStartable +JustSaying.IStartable.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +JustSaying.JustSayingBus +JustSaying.JustSayingBus.AddMessageMiddleware(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> void +JustSaying.JustSayingBus.AddMessagePublisher(JustSaying.Messaging.IMessagePublisher messagePublisher) -> void +JustSaying.JustSayingBus.AddQueue(string subscriptionGroup, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void +JustSaying.JustSayingBus.Completion.get -> System.Threading.Tasks.Task +JustSaying.JustSayingBus.Config.get -> JustSaying.IMessagingConfig +JustSaying.JustSayingBus.Dispose() -> void +JustSaying.JustSayingBus.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void +JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void +JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.JustSayingBus.SerializationRegister.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister +JustSaying.JustSayingBus.SetGroupSettings(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary settings) -> void +JustSaying.JustSayingBus.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Channels.Context.IMessageDeleter +JustSaying.Messaging.Channels.Context.IMessageDeleter.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater +JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Channels.Context.IQueueMessageContext +JustSaying.Messaging.Channels.Context.IQueueMessageContext.Message.get -> Amazon.SQS.Model.Message +JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueName.get -> string +JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueUri.get -> System.Uri +JustSaying.Messaging.Channels.Context.QueueMessageContext +JustSaying.Messaging.Channels.Context.QueueMessageContext.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Channels.Context.QueueMessageContext.Message.get -> Amazon.SQS.Model.Message +JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueName.get -> string +JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueUri.get -> System.Uri +JustSaying.Messaging.Channels.Context.QueueMessageContext.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal +JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.IsPaused.get -> bool +JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Pause() -> void +JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Resume() -> void +JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal +JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.IsPaused.get -> bool +JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.MessageReceivePauseSignal() -> void +JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Pause() -> void +JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Resume() -> void +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.BufferSize.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ConcurrencyLimit.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.MultiplexerCapacity.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.Prefetch.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan +JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.SubscriptionGroupCollection(System.Collections.Generic.IList subscriptionGroups, Microsoft.Extensions.Logging.ILogger logger) -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueue(JustSaying.AwsTools.MessageHandling.ISqsQueue sqsQueue) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueues(System.Collections.Generic.IEnumerable sqsQueues) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.Build(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.SubscriptionGroupConfigBuilder(string groupName) -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.BufferSize.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ConcurrencyLimit.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.MultiplexerCapacity.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Name.get -> string +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Prefetch.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Queues.get -> System.Collections.Generic.IReadOnlyCollection +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.BufferSize.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ConcurrencyLimit.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.MultiplexerCapacity.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.Prefetch.get -> int +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveBufferReadTimeout.get -> System.TimeSpan +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveMessagesWaitTime.get -> System.TimeSpan +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SqsMiddleware.get -> JustSaying.Messaging.Middleware.MiddlewareBase> +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SubscriptionGroupSettingsBuilder() -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithCustomMiddleware(JustSaying.Messaging.Middleware.MiddlewareBase> middleware) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation +JustSaying.Messaging.IMessagePublisher +JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Interrogation.IInterrogable +JustSaying.Messaging.Interrogation.IInterrogable.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +JustSaying.Messaging.Interrogation.InterrogationResult +JustSaying.Messaging.Interrogation.InterrogationResult.Data.get -> object +JustSaying.Messaging.Interrogation.InterrogationResult.InterrogationResult(object data) -> void +JustSaying.Messaging.MessageAttributeValue +JustSaying.Messaging.MessageAttributeValue.BinaryValue.get -> System.Collections.Generic.IReadOnlyCollection +JustSaying.Messaging.MessageAttributeValue.BinaryValue.set -> void +JustSaying.Messaging.MessageAttributeValue.DataType.get -> string +JustSaying.Messaging.MessageAttributeValue.DataType.set -> void +JustSaying.Messaging.MessageAttributeValue.MessageAttributeValue() -> void +JustSaying.Messaging.MessageAttributeValue.StringValue.get -> string +JustSaying.Messaging.MessageAttributeValue.StringValue.set -> void +JustSaying.Messaging.MessageHandling.IHandlerAsync +JustSaying.Messaging.MessageHandling.IHandlerAsync.Handle(T message) -> System.Threading.Tasks.Task +JustSaying.Messaging.MessageHandling.IMessageContextAccessor +JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext +JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.set -> void +JustSaying.Messaging.MessageHandling.IMessageContextReader +JustSaying.Messaging.MessageHandling.IMessageContextReader.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext +JustSaying.Messaging.MessageHandling.IMessageLockAsync +JustSaying.Messaging.MessageHandling.IMessageLockAsync.ReleaseLockAsync(string key) -> System.Threading.Tasks.Task +JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockAsync(string key, System.TimeSpan howLong) -> System.Threading.Tasks.Task +JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockPermanentlyAsync(string key) -> System.Threading.Tasks.Task +JustSaying.Messaging.MessageHandling.ListHandler +JustSaying.Messaging.MessageHandling.ListHandler.Handle(T message) -> System.Threading.Tasks.Task +JustSaying.Messaging.MessageHandling.ListHandler.ListHandler(System.Collections.Generic.IEnumerable> handlers) -> void +JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.MessageHandling.MessageAttributes.Get(string value) -> JustSaying.Messaging.MessageAttributeValue +JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes() -> void +JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes(System.Collections.Generic.Dictionary attributes) -> void +JustSaying.Messaging.MessageHandling.MessageContext +JustSaying.Messaging.MessageHandling.MessageContext.Message.get -> Amazon.SQS.Model.Message +JustSaying.Messaging.MessageHandling.MessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.MessageHandling.MessageContext.MessageContext(Amazon.SQS.Model.Message message, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void +JustSaying.Messaging.MessageHandling.MessageContext.QueueUri.get -> System.Uri +JustSaying.Messaging.MessageHandling.MessageContextAccessor +JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext +JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.set -> void +JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContextAccessor() -> void +JustSaying.Messaging.MessageHandling.MessageLockResponse +JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.get -> bool +JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.set -> void +JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.get -> System.DateTimeOffset +JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.set -> void +JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.get -> long +JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.set -> void +JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.get -> bool +JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.set -> void +JustSaying.Messaging.MessageHandling.MessageLockResponse.MessageLockResponse() -> void +JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy +JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy.GetBackoffDuration(JustSaying.Models.Message message, int approximateReceiveCount, System.Exception lastException = null) -> System.TimeSpan +JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults +JustSaying.Messaging.MessagePublisherExtensions +JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider +JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GenericMessageSubjectProvider() -> void +JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string +JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory +JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister +JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.AddSerializer() -> void +JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes +JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string +JustSaying.Messaging.MessageSerialization.IMessageSerializer +JustSaying.Messaging.MessageSerialization.IMessageSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageSubject(string sqsMessage) -> string +JustSaying.Messaging.MessageSerialization.IMessageSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string +JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider +JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string +JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException +JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException() -> void +JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message) -> void +JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message, System.Exception innerException) -> void +JustSaying.Messaging.MessageSerialization.MessageSerializationRegister +JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.AddSerializer() -> void +JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes +JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.MessageSerializationRegister(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory serializationFactory) -> void +JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string +JustSaying.Messaging.MessageSerialization.MessageWithAttributes +JustSaying.Messaging.MessageSerialization.MessageWithAttributes.Message.get -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageWithAttributes(JustSaying.Models.Message message, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory() -> void +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory(Newtonsoft.Json.JsonSerializerSettings settings) -> void +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageSubject(string sqsMessage) -> string +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer() -> void +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer(Newtonsoft.Json.JsonSerializerSettings settings) -> void +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string +JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider +JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string +JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.NonGenericMessageSubjectProvider() -> void +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory() -> void +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory(System.Text.Json.JsonSerializerOptions options) -> void +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageSubject(string sqsMessage) -> string +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer() -> void +JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer(System.Text.Json.JsonSerializerOptions options) -> void +JustSaying.Messaging.MessageSerialization.TypeSerializer +JustSaying.Messaging.MessageSerialization.TypeSerializer.Serializer.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +JustSaying.Messaging.MessageSerialization.TypeSerializer.Type.get -> System.Type +JustSaying.Messaging.MessageSerialization.TypeSerializer.TypeSerializer(System.Type type, JustSaying.Messaging.MessageSerialization.IMessageSerializer serializer) -> void +JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware +JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware.BackoffMiddleware(JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void +JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions +JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware +JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware.ErrorHandlerMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void +JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions +JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions +JustSaying.Messaging.Middleware.ExactlyOnceMiddleware +JustSaying.Messaging.Middleware.ExactlyOnceMiddleware.ExactlyOnceMiddleware(JustSaying.Messaging.MessageHandling.IMessageLockAsync messageLock, System.TimeSpan timeout, string handlerName, Microsoft.Extensions.Logging.ILogger logger) -> void +JustSaying.Messaging.Middleware.HandleMessageContext +JustSaying.Messaging.Middleware.HandleMessageContext.HandledException.get -> System.Exception +JustSaying.Messaging.Middleware.HandleMessageContext.HandleMessageContext(string queueName, Amazon.SQS.Model.Message rawMessage, JustSaying.Models.Message message, System.Type messageType, JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater visibilityUpdater, JustSaying.Messaging.Channels.Context.IMessageDeleter messageDeleter, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void +JustSaying.Messaging.Middleware.HandleMessageContext.Message.get -> JustSaying.Models.Message +JustSaying.Messaging.Middleware.HandleMessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.Middleware.HandleMessageContext.MessageDeleter.get -> JustSaying.Messaging.Channels.Context.IMessageDeleter +JustSaying.Messaging.Middleware.HandleMessageContext.MessageType.get -> System.Type +JustSaying.Messaging.Middleware.HandleMessageContext.QueueName.get -> string +JustSaying.Messaging.Middleware.HandleMessageContext.QueueUri.get -> System.Uri +JustSaying.Messaging.Middleware.HandleMessageContext.RawMessage.get -> Amazon.SQS.Model.Message +JustSaying.Messaging.Middleware.HandleMessageContext.SetException(System.Exception e) -> void +JustSaying.Messaging.Middleware.HandleMessageContext.VisibilityUpdater.get -> JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater +JustSaying.Messaging.Middleware.HandleMessageContextExtensions +JustSaying.Messaging.Middleware.HandlerInvocationMiddleware +JustSaying.Messaging.Middleware.HandlerInvocationMiddleware.HandlerInvocationMiddleware(System.Func> handlerResolver) -> void +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Build() -> JustSaying.Messaging.Middleware.MiddlewareBase +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Configure(System.Action configure) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.HandlerMiddlewareBuilder(JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver) -> void +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(System.Func> middlewareFactory) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.UseHandler() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions +JustSaying.Messaging.Middleware.Logging.LoggingMiddleware +JustSaying.Messaging.Middleware.Logging.LoggingMiddleware.LoggingMiddleware(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware +JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware.MessageContextAccessorMiddleware(JustSaying.Messaging.MessageHandling.IMessageContextAccessor messageContextAccessor) -> void +JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions +JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions +JustSaying.Messaging.Middleware.MiddlewareBase +JustSaying.Messaging.Middleware.MiddlewareBase.MiddlewareBase() -> void +JustSaying.Messaging.Middleware.MiddlewareBase.RunAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +JustSaying.Messaging.Middleware.MiddlewareBase.WithNext(JustSaying.Messaging.Middleware.MiddlewareBase next) -> JustSaying.Messaging.Middleware.MiddlewareBase +JustSaying.Messaging.Middleware.MiddlewareBuilder +JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware +JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.SqsPostProcessorMiddleware() -> void +JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware +JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.DefaultReceiveMessagesMiddleware(Microsoft.Extensions.Logging.ILogger logger) -> void +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.get -> int +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.set -> void +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.get -> string +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.set -> void +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.ReceiveMessagesContext() -> void +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.get -> string +JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.set -> void +JustSaying.Messaging.Middleware.StopwatchMiddleware +JustSaying.Messaging.Middleware.StopwatchMiddleware.StopwatchMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor, System.Type handlerType) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor +JustSaying.Messaging.Monitoring.IMessageMonitor.Handled(JustSaying.Models.Message message) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.HandleException(System.Type messageType) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.HandleTime(System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.IncrementThrottlingStatistic() -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.IssuePublishingMessage() -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.IMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.Handled(JustSaying.Models.Message message) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleException(System.Type messageType) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleTime(System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IncrementThrottlingStatistic() -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IssuePublishingMessage() -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.NullOpMessageMonitor() -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void +JustSaying.Messaging.Monitoring.NullOpMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void +JustSaying.Messaging.PublishMetadata +JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, double value) -> JustSaying.Messaging.PublishMetadata +JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, JustSaying.Messaging.MessageAttributeValue value) -> JustSaying.Messaging.PublishMetadata +JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, string value) -> JustSaying.Messaging.PublishMetadata +JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, System.Collections.Generic.IReadOnlyCollection data) -> JustSaying.Messaging.PublishMetadata +JustSaying.Messaging.PublishMetadata.Delay.get -> System.TimeSpan? +JustSaying.Messaging.PublishMetadata.Delay.set -> void +JustSaying.Messaging.PublishMetadata.MessageAttributes.get -> System.Collections.Generic.IDictionary +JustSaying.Messaging.PublishMetadata.PublishMetadata() -> void +JustSaying.MessagingBusBuilder +JustSaying.MessagingBusBuilder.BuildClientFactory() -> JustSaying.AwsTools.IAwsClientFactory +JustSaying.MessagingBusBuilder.BuildPublisher() -> JustSaying.Messaging.IMessagePublisher +JustSaying.MessagingBusBuilder.BuildSubscribers() -> JustSaying.IMessagingBus +JustSaying.MessagingBusBuilder.Client(System.Action configure) -> JustSaying.MessagingBusBuilder +JustSaying.MessagingBusBuilder.Messaging(System.Action configure) -> JustSaying.MessagingBusBuilder +JustSaying.MessagingBusBuilder.MessagingBusBuilder() -> void +JustSaying.MessagingBusBuilder.Publications(System.Action configure) -> JustSaying.MessagingBusBuilder +JustSaying.MessagingBusBuilder.Services(System.Action configure) -> JustSaying.MessagingBusBuilder +JustSaying.MessagingBusBuilder.Subscriptions(System.Action configure) -> JustSaying.MessagingBusBuilder +JustSaying.MessagingBusBuilder.WithServiceResolver(JustSaying.Fluent.IServiceResolver serviceResolver) -> JustSaying.MessagingBusBuilder +JustSaying.MessagingConfig +JustSaying.MessagingConfig.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection +JustSaying.MessagingConfig.AdditionalSubscriberAccounts.set -> void +JustSaying.MessagingConfig.MessageResponseLogger.get -> System.Action +JustSaying.MessagingConfig.MessageResponseLogger.set -> void +JustSaying.MessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider +JustSaying.MessagingConfig.MessageSubjectProvider.set -> void +JustSaying.MessagingConfig.MessagingConfig() -> void +JustSaying.MessagingConfig.PublishFailureBackoff.get -> System.TimeSpan +JustSaying.MessagingConfig.PublishFailureBackoff.set -> void +JustSaying.MessagingConfig.PublishFailureReAttempts.get -> int +JustSaying.MessagingConfig.PublishFailureReAttempts.set -> void +JustSaying.MessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention +JustSaying.MessagingConfig.QueueNamingConvention.set -> void +JustSaying.MessagingConfig.Region.get -> string +JustSaying.MessagingConfig.Region.set -> void +JustSaying.MessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention +JustSaying.MessagingConfig.TopicNamingConvention.set -> void +JustSaying.Naming.DefaultNamingConventions +JustSaying.Naming.DefaultNamingConventions.DefaultNamingConventions() -> void +JustSaying.Naming.IQueueNamingConvention +JustSaying.Naming.IQueueNamingConvention.QueueName() -> string +JustSaying.Naming.ITopicNamingConvention +JustSaying.Naming.ITopicNamingConvention.TopicName() -> string +JustSaying.Naming.NamingConventionExtensions +override JustSaying.AwsTools.ErrorQueue.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary +override JustSaying.AwsTools.ErrorQueue.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool +override JustSaying.AwsTools.ErrorQueue.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +override JustSaying.AwsTools.MessageHandling.SqsQueueByName.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task +override JustSaying.AwsTools.MessageHandling.SqsQueueByName.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +override JustSaying.AwsTools.MessageHandling.SqsQueueByName.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary +override JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.OnValidating() -> void +override JustSaying.Messaging.MessageHandling.MessageLockResponse.ToString() -> string +override JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.HandleMessageContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +override JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext context, System.Func>> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task> +static JustSaying.AwsTools.JustSayingConstants.DefaultAttributeEncryptionKeyReusePeriod.get -> System.TimeSpan +static JustSaying.AwsTools.JustSayingConstants.DefaultHandlerRetryCount.get -> int +static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryCount.get -> int +static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryInterval.get -> System.TimeSpan +static JustSaying.AwsTools.JustSayingConstants.DefaultRetentionPeriod.get -> System.TimeSpan +static JustSaying.AwsTools.JustSayingConstants.DefaultSnsAttributeEncryptionKeyId.get -> string +static JustSaying.AwsTools.JustSayingConstants.DefaultSqsAttributeEncryptionKeyId.get -> string +static JustSaying.AwsTools.JustSayingConstants.DefaultVisibilityTimeout.get -> System.TimeSpan +static JustSaying.AwsTools.JustSayingConstants.MaximumDeliveryDelay.get -> System.TimeSpan +static JustSaying.AwsTools.JustSayingConstants.MaximumRetentionPeriod.get -> System.TimeSpan +static JustSaying.AwsTools.JustSayingConstants.MinimumDeliveryDelay.get -> System.TimeSpan +static JustSaying.AwsTools.JustSayingConstants.MinimumRetentionPeriod.get -> System.TimeSpan +static JustSaying.Extensions.ChannelExtensions.MergeAsync(System.Collections.Generic.IEnumerable> inputs, System.Threading.Channels.ChannelWriter output, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task +static JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation.Validate(this JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings settings) -> void +static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.MaxAmazonMessageCap.get -> int +static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.ParallelHandlerExecutionPerCore.get -> int +static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message) -> System.Threading.Tasks.Task +static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata) -> System.Threading.Tasks.Task +static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +static JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions.UseBackoff(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +static JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions.UseErrorHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +static JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions.UseExactlyOnce(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, string lockKey, System.TimeSpan? lockDuration = null) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +static JustSaying.Messaging.Middleware.HandleMessageContextExtensions.MessageAs(this JustSaying.Messaging.Middleware.HandleMessageContext context) -> TMessage +static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseDefaults(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Func> handler) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +static JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions.UseMessageContextAccessor(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +static JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions.UseStopwatch(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder +static JustSaying.Messaging.Middleware.MiddlewareBuilder.BuildAsync(params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase +static JustSaying.Messaging.Middleware.MiddlewareBuilder.WithAsync(this JustSaying.Messaging.Middleware.MiddlewareBase inner, params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase +static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.IQueueNamingConvention namingConvention, string overrideQueueName) -> string +static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.ITopicNamingConvention namingConvention, string overrideTopicName) -> string +virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceConfig config) -> void +virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SQS.AmazonSQSConfig config) -> void +virtual JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task +virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool +virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +virtual JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.OnValidating() -> void +virtual JustSaying.MessagingConfig.Validate() -> void +virtual JustSaying.Naming.DefaultNamingConventions.QueueName() -> string +virtual JustSaying.Naming.DefaultNamingConventions.TopicName() -> string diff --git a/src/JustSaying/PublicAPI/PublicAPI.Unshipped.txt b/src/JustSaying/PublicAPI/PublicAPI.Unshipped.txt new file mode 100644 index 000000000..edc504236 --- /dev/null +++ b/src/JustSaying/PublicAPI/PublicAPI.Unshipped.txt @@ -0,0 +1,174 @@ +const JustSaying.Messaging.Compression.ContentEncodings.GzipBase64 = "gzip,base64" -> string +JustSaying.AwsTools.MessageHandling.PublishCompressionOptions +JustSaying.AwsTools.MessageHandling.PublishCompressionOptions.CompressionEncoding.get -> string +JustSaying.AwsTools.MessageHandling.PublishCompressionOptions.CompressionEncoding.set -> void +JustSaying.AwsTools.MessageHandling.PublishCompressionOptions.MessageLengthThreshold.get -> int +JustSaying.AwsTools.MessageHandling.PublishCompressionOptions.MessageLengthThreshold.set -> void +JustSaying.AwsTools.MessageHandling.PublishCompressionOptions.PublishCompressionOptions() -> void +JustSaying.AwsTools.MessageHandling.PublishDestinationType +JustSaying.AwsTools.MessageHandling.PublishDestinationType.Queue = 2 -> JustSaying.AwsTools.MessageHandling.PublishDestinationType +JustSaying.AwsTools.MessageHandling.PublishDestinationType.Topic = 1 -> JustSaying.AwsTools.MessageHandling.PublishDestinationType +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.CompressionOptions.get -> JustSaying.AwsTools.MessageHandling.PublishCompressionOptions +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.CompressionOptions.set -> void +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.IsRawMessage.get -> bool +JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.IsRawMessage.set -> void +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.IsRawMessage.get -> bool +JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.IsRawMessage.set -> void +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.RawMessageDelivery.get -> bool +JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.RawMessageDelivery.set -> void +JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration.CompressionOptions.get -> JustSaying.AwsTools.MessageHandling.PublishCompressionOptions +JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration.CompressionOptions.set -> void +JustSaying.Fluent.QueueAddressConfiguration.RawMessageDelivery.get -> bool +JustSaying.Fluent.QueueAddressConfiguration.RawMessageDelivery.set -> void +JustSaying.Fluent.QueueAddressPublicationBuilder.WithCompression(JustSaying.AwsTools.MessageHandling.PublishCompressionOptions compressionOptions) -> JustSaying.Fluent.QueueAddressPublicationBuilder +JustSaying.Fluent.QueueAddressPublicationBuilder.WithSubject(string subject) -> JustSaying.Fluent.QueueAddressPublicationBuilder +JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithMessageBodySerializer(JustSaying.Messaging.MessageSerialization.IMessageBodySerializer messageBodySerializer) -> JustSaying.Fluent.ISubscriptionBuilder +JustSaying.Fluent.TopicAddressPublicationBuilder.WithCompression(JustSaying.AwsTools.MessageHandling.PublishCompressionOptions compressionOptions) -> JustSaying.Fluent.TopicAddressPublicationBuilder +JustSaying.Fluent.TopicAddressPublicationBuilder.WithSubject(string subject) -> JustSaying.Fluent.TopicAddressPublicationBuilder +JustSaying.IMessagingConfig.DefaultCompressionOptions.get -> JustSaying.AwsTools.MessageHandling.PublishCompressionOptions +JustSaying.IMessagingConfig.DefaultCompressionOptions.set -> void +JustSaying.Messaging.Channels.Context.IQueueMessageContext.MessageConverter.get -> JustSaying.Messaging.IReceivedMessageConverter +JustSaying.Messaging.Channels.Context.QueueMessageContext.MessageConverter.get -> JustSaying.Messaging.IReceivedMessageConverter +JustSaying.Messaging.Channels.SubscriptionGroups.SqsSource +JustSaying.Messaging.Channels.SubscriptionGroups.SqsSource.MessageConverter.get -> JustSaying.Messaging.IReceivedMessageConverter +JustSaying.Messaging.Channels.SubscriptionGroups.SqsSource.MessageConverter.set -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SqsSource.SqsQueue.get -> JustSaying.AwsTools.MessageHandling.ISqsQueue +JustSaying.Messaging.Channels.SubscriptionGroups.SqsSource.SqsQueue.set -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SqsSource.SqsSource() -> void +JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.QueueSources.get -> System.Collections.Generic.IReadOnlyCollection +JustSaying.Messaging.Compression.ContentEncodings +JustSaying.Messaging.Compression.GzipMessageBodyCompression +JustSaying.Messaging.Compression.GzipMessageBodyCompression.Compress(string messageBody) -> string +JustSaying.Messaging.Compression.GzipMessageBodyCompression.ContentEncoding.get -> string +JustSaying.Messaging.Compression.GzipMessageBodyCompression.Decompress(string messageBody) -> string +JustSaying.Messaging.Compression.GzipMessageBodyCompression.GzipMessageBodyCompression() -> void +JustSaying.Messaging.Compression.IMessageBodyCompression +JustSaying.Messaging.Compression.IMessageBodyCompression.Compress(string messageBody) -> string +JustSaying.Messaging.Compression.IMessageBodyCompression.ContentEncoding.get -> string +JustSaying.Messaging.Compression.IMessageBodyCompression.Decompress(string messageBody) -> string +JustSaying.Messaging.Compression.MessageCompressionRegistry +JustSaying.Messaging.Compression.MessageCompressionRegistry.GetCompression(string contentEncoding) -> JustSaying.Messaging.Compression.IMessageBodyCompression +JustSaying.Messaging.Compression.MessageCompressionRegistry.MessageCompressionRegistry(System.Collections.Generic.IList compressions = null) -> void +JustSaying.Messaging.IPublishMessageConverter +JustSaying.Messaging.IPublishMessageConverter.ConvertForPublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata publishMetadata) -> System.Threading.Tasks.ValueTask +JustSaying.Messaging.IReceivedMessageConverter +JustSaying.Messaging.IReceivedMessageConverter.ConvertForReceiveAsync(Amazon.SQS.Model.Message message) -> System.Threading.Tasks.ValueTask +JustSaying.Messaging.MessageHandling.MessageAttributes.GetKeys() -> System.Collections.Generic.IReadOnlyCollection +JustSaying.Messaging.MessageSerialization.IMessageBodySerializationFactory +JustSaying.Messaging.MessageSerialization.IMessageBodySerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageBodySerializer +JustSaying.Messaging.MessageSerialization.IMessageBodySerializer +JustSaying.Messaging.MessageSerialization.IMessageBodySerializer.Deserialize(string message) -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.IMessageBodySerializer.Serialize(JustSaying.Models.Message message) -> string +JustSaying.Messaging.MessageSerialization.NewtonsoftMessageBodySerializer +JustSaying.Messaging.MessageSerialization.NewtonsoftMessageBodySerializer.Deserialize(string message) -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.NewtonsoftMessageBodySerializer.NewtonsoftMessageBodySerializer() -> void +JustSaying.Messaging.MessageSerialization.NewtonsoftMessageBodySerializer.NewtonsoftMessageBodySerializer(Newtonsoft.Json.JsonSerializerSettings settings) -> void +JustSaying.Messaging.MessageSerialization.NewtonsoftMessageBodySerializer.Serialize(JustSaying.Models.Message message) -> string +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageBodySerializer +JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory(Newtonsoft.Json.JsonSerializerSettings settings = null) -> void +JustSaying.Messaging.MessageSerialization.PublishMessage +JustSaying.Messaging.MessageSerialization.PublishMessage.Body.get -> string +JustSaying.Messaging.MessageSerialization.PublishMessage.Deconstruct(out string body, out System.Collections.Generic.Dictionary attributes, out string subject) -> void +JustSaying.Messaging.MessageSerialization.PublishMessage.MessageAttributes.get -> System.Collections.Generic.Dictionary +JustSaying.Messaging.MessageSerialization.PublishMessage.PublishMessage(string body, System.Collections.Generic.Dictionary messageAttributes, string subject) -> void +JustSaying.Messaging.MessageSerialization.PublishMessage.Subject.get -> string +JustSaying.Messaging.MessageSerialization.ReceivedMessage +JustSaying.Messaging.MessageSerialization.ReceivedMessage.Deconstruct(out JustSaying.Models.Message message, out JustSaying.Messaging.MessageHandling.MessageAttributes attributes) -> void +JustSaying.Messaging.MessageSerialization.ReceivedMessage.Message.get -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.ReceivedMessage.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes +JustSaying.Messaging.MessageSerialization.ReceivedMessage.ReceivedMessage(JustSaying.Models.Message message, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void +JustSaying.Messaging.MessageSerialization.SystemTextJsonMessageBodySerializer +JustSaying.Messaging.MessageSerialization.SystemTextJsonMessageBodySerializer +JustSaying.Messaging.MessageSerialization.SystemTextJsonMessageBodySerializer.Deserialize(string messageBody) -> JustSaying.Models.Message +JustSaying.Messaging.MessageSerialization.SystemTextJsonMessageBodySerializer.Serialize(JustSaying.Models.Message message) -> string +JustSaying.Messaging.MessageSerialization.SystemTextJsonMessageBodySerializer.SystemTextJsonMessageBodySerializer(System.Text.Json.JsonSerializerOptions options) -> void +JustSaying.MessagingConfig.DefaultCompressionOptions.get -> JustSaying.AwsTools.MessageHandling.PublishCompressionOptions +JustSaying.MessagingConfig.DefaultCompressionOptions.set -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher +*REMOVED*JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.MessageDispatcher(JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Monitoring.IMessageMonitor messagingMonitor, JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap middlewareMap, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Arn.get -> string +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Client.get -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.get -> System.Action +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.set -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(string topicArn, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.GetMessageInContext(JustSaying.Models.Message message) -> string +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.get -> System.Action +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.set -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.QueueUrl.get -> System.Uri +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(System.Uri queueUrl, Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +*REMOVED*JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +*REMOVED*JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.get -> System.Action +*REMOVED*JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.set -> void +*REMOVED*JustSaying.JustSayingBus.AddQueue(string subscriptionGroup, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void +*REMOVED*JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void +*REMOVED*JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void +*REMOVED*JustSaying.JustSayingBus.SerializationRegister.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister +*REMOVED*JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueue(JustSaying.AwsTools.MessageHandling.ISqsQueue sqsQueue) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +*REMOVED*JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueues(System.Collections.Generic.IEnumerable sqsQueues) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder +*REMOVED*JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory +*REMOVED*JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup +*REMOVED*JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +*REMOVED*JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +*REMOVED*JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Queues.get -> System.Collections.Generic.IReadOnlyCollection +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.AddSerializer() -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageSubject(string sqsMessage) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageSubject(string sqsMessage) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.IMessageSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageSerializationRegister +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.AddSerializer() -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.MessageSerializationRegister(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory serializationFactory) -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageWithAttributes +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageWithAttributes.Message.get -> JustSaying.Models.Message +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes +*REMOVED*JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageWithAttributes(JustSaying.Models.Message message, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory() -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory(Newtonsoft.Json.JsonSerializerSettings settings) -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageSubject(string sqsMessage) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer() -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer(Newtonsoft.Json.JsonSerializerSettings settings) -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory() -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory(System.Text.Json.JsonSerializerOptions options) -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageSubject(string sqsMessage) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer() -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer(System.Text.Json.JsonSerializerOptions options) -> void +*REMOVED*JustSaying.Messaging.MessageSerialization.TypeSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.TypeSerializer.Serializer.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializer +*REMOVED*JustSaying.Messaging.MessageSerialization.TypeSerializer.Type.get -> System.Type +*REMOVED*JustSaying.Messaging.MessageSerialization.TypeSerializer.TypeSerializer(System.Type type, JustSaying.Messaging.MessageSerialization.IMessageSerializer serializer) -> void +*REMOVED*virtual JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult +*REMOVED*JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher +static JustSaying.Messaging.MessageSerialization.SystemTextJsonMessageBodySerializer.DefaultJsonSerializerOptions.get -> System.Text.Json.JsonSerializerOptions +JustSaying.Fluent.QueueAddressPublicationBuilder.WithRawMessages() -> JustSaying.Fluent.QueueAddressPublicationBuilder diff --git a/src/JustSaying/PublicAPI/net461/PublicAPI.Shipped.txt b/src/JustSaying/PublicAPI/net461/PublicAPI.Shipped.txt index ac3e28b2f..e69de29bb 100644 --- a/src/JustSaying/PublicAPI/net461/PublicAPI.Shipped.txt +++ b/src/JustSaying/PublicAPI/net461/PublicAPI.Shipped.txt @@ -1,749 +0,0 @@ -abstract JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -abstract JustSaying.Messaging.Middleware.MiddlewareBase.RunInnerAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -const JustSaying.AwsTools.JustSayingConstants.AttributeArn = "QueueArn" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeDeliveryDelay = "DelaySeconds" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyId = "KmsMasterKeyId" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyReusePeriodSecondId = "KmsDataKeyReusePeriodSeconds" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributePolicy = "Policy" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeRedrivePolicy = "RedrivePolicy" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeRetentionPeriod = "MessageRetentionPeriod" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeVisibilityTimeout = "VisibilityTimeout" -> string -JustSaying.AwsTools.AwsClientFactoryProxy -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy() -> void -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Func awsClientFactoryFunc) -> void -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Lazy factory) -> void -JustSaying.AwsTools.AwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.AwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void -JustSaying.AwsTools.DefaultAwsClientFactory -JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory() -> void -JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory(Amazon.Runtime.AWSCredentials customCredentials) -> void -JustSaying.AwsTools.DefaultAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.DefaultAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.get -> System.Uri -JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.set -> void -JustSaying.AwsTools.ErrorQueue -JustSaying.AwsTools.ErrorQueue.ErrorQueue(Amazon.RegionEndpoint region, string sourceQueueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.IAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.IAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.IAwsClientFactoryProxy -JustSaying.AwsTools.IAwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.IAwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void -JustSaying.AwsTools.JustSayingConstants -JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher -JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.MessageDispatcher(JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Monitoring.IMessageMonitor messagingMonitor, JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap middlewareMap, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Add(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Contains(string queueName, System.Type messageType) -> bool -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Get(string queueName, System.Type messageType) -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.MiddlewareMap() -> void -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Types.get -> System.Collections.Generic.IEnumerable -JustSaying.AwsTools.MessageHandling.ISqsQueue -JustSaying.AwsTools.MessageHandling.ISqsQueue.Arn.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.QueueName.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> -JustSaying.AwsTools.MessageHandling.ISqsQueue.RegionSystemName.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.Uri.get -> System.Uri -JustSaying.AwsTools.MessageHandling.MessageResponse -JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.get -> System.Net.HttpStatusCode? -JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.set -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.get -> string -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.set -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageResponse() -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.get -> Amazon.Runtime.ResponseMetadata -JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.set -> void -JustSaying.AwsTools.MessageHandling.PublishException -JustSaying.AwsTools.MessageHandling.PublishException.PublishException() -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message) -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message, System.Exception inner) -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.Queue.get -> JustSaying.AwsTools.MessageHandling.ISqsQueue -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(System.Func startupTask, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.StartupTask.get -> System.Func -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Client.get -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.get -> System.Action -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.set -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(string topicArn, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName -JustSaying.AwsTools.MessageHandling.SnsTopicByName.ApplyTagsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateWithEncryptionAsync(JustSaying.AwsTools.QueueCreation.ServerSideEncryption config, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.EnsurePolicyIsUpdatedAsync(System.Collections.Generic.IReadOnlyCollection additionalSubscriberAccounts) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.SnsTopicByName.SnsTopicByName(string topicName, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.get -> System.Collections.Generic.IDictionary -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.set -> void -JustSaying.AwsTools.MessageHandling.SnsTopicByName.TopicName.get -> string -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.GetMessageInContext(JustSaying.Models.Message message) -> string -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.get -> System.Action -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.set -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.QueueUrl.get -> System.Uri -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(System.Uri queueUrl, Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByName -JustSaying.AwsTools.MessageHandling.SqsQueueByName.EnsureQueueAndErrorQueueExistAndAllAttributesAreUpdatedAsync(JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByName.SqsQueueByName(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, int retryCountBeforeSendingToErrorQueue, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Client.get -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Logger.get -> Microsoft.Extensions.Logging.ILogger -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueName.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.RegionSystemName.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.SqsQueueByNameBase(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Uri.get -> System.Uri -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.AmazonQueueCreator(JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException() -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message) -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message, System.Exception inner) -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.RedrivePolicy -JustSaying.AwsTools.QueueCreation.RedrivePolicy.DeadLetterQueue.get -> string -JustSaying.AwsTools.QueueCreation.RedrivePolicy.DeadLetterQueue.set -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.MaximumReceives.get -> int -JustSaying.AwsTools.QueueCreation.RedrivePolicy.MaximumReceives.set -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.RedrivePolicy() -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.RedrivePolicy(int maximumReceives, string deadLetterQueue) -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.set -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.get -> string -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.set -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.ServerSideEncryption() -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.set -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.get -> System.Func -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.set -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.SnsWriteConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ApplyQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.get -> bool -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.get -> string -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.get -> int -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.SqsBasicConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.Validate() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.ApplyTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SqsReadConfiguration(JustSaying.AwsTools.QueueCreation.SubscriptionType subscriptionType) -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionType.get -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.get -> System.Collections.Generic.Dictionary -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.set -> void -JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration -JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration.SqsWriteConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SubscriptionType.PointToPoint = 1 -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SubscriptionType.ToTopic = 0 -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.Extensions.ChannelExtensions -JustSaying.Fluent.AccountAddressProvider -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void -JustSaying.Fluent.AccountAddressProvider.GetQueueUri(string queueName) -> System.Uri -JustSaying.Fluent.AccountAddressProvider.GetQueueUriByConvention() -> System.Uri -JustSaying.Fluent.AccountAddressProvider.GetTopicArn(string topicName) -> string -JustSaying.Fluent.AccountAddressProvider.GetTopicArnByConvention() -> string -JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.Build() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.Fluent.AwsClientFactoryBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithAnonymousCredentials() -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithBasicCredentials(string accessKey, string secretKey) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithClientFactory(System.Func clientFactory) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithCredentials(Amazon.Runtime.AWSCredentials credentials) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUri(System.Uri uri) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUrl(string url) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithSessionCredentials(string accessKeyId, string secretAccessKey, string token) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.IMessageBusConfigurationContributor -JustSaying.Fluent.IMessageBusConfigurationContributor.Configure(JustSaying.MessagingBusBuilder builder) -> void -JustSaying.Fluent.IServiceResolver -JustSaying.Fluent.IServiceResolver.ResolveOptionalService() -> T -JustSaying.Fluent.IServiceResolver.ResolveService() -> T -JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.ISubscriptionBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver, JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues creator, JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactoryProxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.ISubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.Build() -> JustSaying.IMessagingConfig -JustSaying.Fluent.MessagingConfigurationBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccount(string accountId) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(params string[] regions) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(System.Collections.Generic.IEnumerable accountIds) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageResponseLogger(System.Action logger) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageSubjectProvider(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider subjectProvider) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureBackoff(System.TimeSpan value) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureReattempts(int value) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(Amazon.RegionEndpoint region) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(string region) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueue() -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueue(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueArn(string queueArn) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueUri(System.Uri queueUrl) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueUrl(string queueUrl) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopic() -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopic(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopicArn(string topicArn, System.Action> configure = null) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.QueueAddressConfiguration -JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.get -> System.Action -JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.set -> void -JustSaying.Fluent.QueueAddressConfiguration.QueueAddressConfiguration() -> void -JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.get -> string -JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.set -> void -JustSaying.Fluent.QueueAddressConfiguration.Validate() -> void -JustSaying.Fluent.QueueAddressPublicationBuilder -JustSaying.Fluent.QueueAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.QueueAddressSubscriptionBuilder -JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueAddressSubscriptionBuilder -JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithName(string queueName) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithDefaultQueue() -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(JustSaying.IHandlerResolver handlerResolver) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(System.Func handlerResolver) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(System.Func loggerFactory) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithMessageContextAccessor(System.Func contextAccessor) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithMessageMonitoring(System.Func monitoring) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.SnsWriteConfigurationBuilder -JustSaying.Fluent.SnsWriteConfigurationBuilder.SnsWriteConfigurationBuilder() -> void -JustSaying.Fluent.SnsWriteConfigurationBuilder.WithErrorHandler(System.Func handler) -> JustSaying.Fluent.SnsWriteConfigurationBuilder -JustSaying.Fluent.SqsConfigurationBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(JustSaying.AwsTools.QueueCreation.ServerSideEncryption encryption) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(string masterKeyId) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueue() -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueueOptOut(bool value) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithMessageRetention(System.TimeSpan value) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithNoErrorQueue() -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithVisibilityTimeout(System.TimeSpan value) -> TBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder.SqsReadConfigurationBuilder() -> void -JustSaying.Fluent.SqsReadConfigurationBuilder.WithSubscriptionGroup(string subscriptionGroupName) -> JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder.WithTopicSourceAccount(string id) -> JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsWriteConfigurationBuilder -JustSaying.Fluent.SqsWriteConfigurationBuilder.SqsWriteConfigurationBuilder() -> void -JustSaying.Fluent.SqsWriteConfigurationBuilder.WithQueueName(string name) -> JustSaying.Fluent.SqsWriteConfigurationBuilder -JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueue() -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueue(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueArn(string queueArn, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueUri(System.Uri queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueUrl(string queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic() -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic(string topicNameOverride, System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.WithDefaults(System.Action configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.WithSubscriptionGroup(string groupName, System.Action action) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.TopicAddressPublicationBuilder -JustSaying.Fluent.TopicAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.TopicAddressPublicationBuilder.WithExceptionHandler(System.Func exceptionHandler) -> JustSaying.Fluent.TopicAddressPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.get -> System.Func -JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.set -> void -JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(System.Func topicNameCustomizer) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.IntoDefaultTopic() -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.HandlerNotRegisteredWithContainerException -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException() -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message) -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message, System.Exception inner) -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.HandlerResolutionContext -JustSaying.HandlerResolutionContext.HandlerResolutionContext(string queueName) -> void -JustSaying.HandlerResolutionContext.QueueName.get -> string -JustSaying.IHandlerResolver -JustSaying.IHandlerResolver.ResolveHandler(JustSaying.HandlerResolutionContext context) -> JustSaying.Messaging.MessageHandling.IHandlerAsync -JustSaying.IMessagingBus -JustSaying.IMessagingConfig -JustSaying.IMessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.IMessagingConfig.MessageSubjectProvider.set -> void -JustSaying.IMessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention -JustSaying.IMessagingConfig.QueueNamingConvention.set -> void -JustSaying.IMessagingConfig.Region.get -> string -JustSaying.IMessagingConfig.Region.set -> void -JustSaying.IMessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention -JustSaying.IMessagingConfig.TopicNamingConvention.set -> void -JustSaying.IMessagingConfig.Validate() -> void -JustSaying.IPublishConfiguration -JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.set -> void -JustSaying.IPublishConfiguration.MessageResponseLogger.get -> System.Action -JustSaying.IPublishConfiguration.MessageResponseLogger.set -> void -JustSaying.IPublishConfiguration.PublishFailureBackoff.get -> System.TimeSpan -JustSaying.IPublishConfiguration.PublishFailureBackoff.set -> void -JustSaying.IPublishConfiguration.PublishFailureReAttempts.get -> int -JustSaying.IPublishConfiguration.PublishFailureReAttempts.set -> void -JustSaying.IStartable -JustSaying.IStartable.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus -JustSaying.JustSayingBus.AddMessageMiddleware(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> void -JustSaying.JustSayingBus.AddMessagePublisher(JustSaying.Messaging.IMessagePublisher messagePublisher) -> void -JustSaying.JustSayingBus.AddQueue(string subscriptionGroup, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.JustSayingBus.Completion.get -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.Config.get -> JustSaying.IMessagingConfig -JustSaying.JustSayingBus.Dispose() -> void -JustSaying.JustSayingBus.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.SerializationRegister.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister -JustSaying.JustSayingBus.SetGroupSettings(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary settings) -> void -JustSaying.JustSayingBus.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IMessageDeleter -JustSaying.Messaging.Channels.Context.IMessageDeleter.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater -JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IQueueMessageContext -JustSaying.Messaging.Channels.Context.IQueueMessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueName.get -> string -JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Channels.Context.QueueMessageContext -JustSaying.Messaging.Channels.Context.QueueMessageContext.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.QueueMessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueName.get -> string -JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Channels.Context.QueueMessageContext.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.IsPaused.get -> bool -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Pause() -> void -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Resume() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.IsPaused.get -> bool -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.MessageReceivePauseSignal() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Pause() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Resume() -> void -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.SubscriptionGroupCollection(System.Collections.Generic.IList subscriptionGroups, Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueue(JustSaying.AwsTools.MessageHandling.ISqsQueue sqsQueue) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueues(System.Collections.Generic.IEnumerable sqsQueues) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.Build(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.SubscriptionGroupConfigBuilder(string groupName) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Name.get -> string -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Queues.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SqsMiddleware.get -> JustSaying.Messaging.Middleware.MiddlewareBase> -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SubscriptionGroupSettingsBuilder() -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithCustomMiddleware(JustSaying.Messaging.Middleware.MiddlewareBase> middleware) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation -JustSaying.Messaging.IMessagePublisher -JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Interrogation.IInterrogable -JustSaying.Messaging.Interrogation.IInterrogable.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Interrogation.InterrogationResult.Data.get -> object -JustSaying.Messaging.Interrogation.InterrogationResult.InterrogationResult(object data) -> void -JustSaying.Messaging.MessageAttributeValue -JustSaying.Messaging.MessageAttributeValue.BinaryValue.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.Messaging.MessageAttributeValue.BinaryValue.set -> void -JustSaying.Messaging.MessageAttributeValue.DataType.get -> string -JustSaying.Messaging.MessageAttributeValue.DataType.set -> void -JustSaying.Messaging.MessageAttributeValue.MessageAttributeValue() -> void -JustSaying.Messaging.MessageAttributeValue.StringValue.get -> string -JustSaying.Messaging.MessageAttributeValue.StringValue.set -> void -JustSaying.Messaging.MessageHandling.IHandlerAsync -JustSaying.Messaging.MessageHandling.IHandlerAsync.Handle(T message) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageContextAccessor -JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.set -> void -JustSaying.Messaging.MessageHandling.IMessageContextReader -JustSaying.Messaging.MessageHandling.IMessageContextReader.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.IMessageLockAsync -JustSaying.Messaging.MessageHandling.IMessageLockAsync.ReleaseLockAsync(string key) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockAsync(string key, System.TimeSpan howLong) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockPermanentlyAsync(string key) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.ListHandler -JustSaying.Messaging.MessageHandling.ListHandler.Handle(T message) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.ListHandler.ListHandler(System.Collections.Generic.IEnumerable> handlers) -> void -JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageHandling.MessageAttributes.Get(string value) -> JustSaying.Messaging.MessageAttributeValue -JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes() -> void -JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes(System.Collections.Generic.Dictionary attributes) -> void -JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.MessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.MessageHandling.MessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageHandling.MessageContext.MessageContext(Amazon.SQS.Model.Message message, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.MessageHandling.MessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.MessageHandling.MessageContextAccessor -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.set -> void -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContextAccessor() -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse -JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.get -> bool -JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.get -> System.DateTimeOffset -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.get -> long -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.get -> bool -JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.MessageLockResponse() -> void -JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy -JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy.GetBackoffDuration(JustSaying.Models.Message message, int approximateReceiveCount, System.Exception lastException = null) -> System.TimeSpan -JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults -JustSaying.Messaging.MessagePublisherExtensions -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GenericMessageSubjectProvider() -> void -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory -JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.AddSerializer() -> void -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.IMessageSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException() -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message) -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message, System.Exception innerException) -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.AddSerializer() -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.MessageSerializationRegister(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory serializationFactory) -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string -JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.Message.get -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageWithAttributes(JustSaying.Models.Message message, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory() -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory(Newtonsoft.Json.JsonSerializerSettings settings) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer() -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer(Newtonsoft.Json.JsonSerializerSettings settings) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.NonGenericMessageSubjectProvider() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory(System.Text.Json.JsonSerializerOptions options) -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer(System.Text.Json.JsonSerializerOptions options) -> void -JustSaying.Messaging.MessageSerialization.TypeSerializer -JustSaying.Messaging.MessageSerialization.TypeSerializer.Serializer.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.TypeSerializer.Type.get -> System.Type -JustSaying.Messaging.MessageSerialization.TypeSerializer.TypeSerializer(System.Type type, JustSaying.Messaging.MessageSerialization.IMessageSerializer serializer) -> void -JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware -JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware.BackoffMiddleware(JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware.ErrorHandlerMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ExactlyOnceMiddleware -JustSaying.Messaging.Middleware.ExactlyOnceMiddleware.ExactlyOnceMiddleware(JustSaying.Messaging.MessageHandling.IMessageLockAsync messageLock, System.TimeSpan timeout, string handlerName, Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Middleware.HandleMessageContext -JustSaying.Messaging.Middleware.HandleMessageContext.HandledException.get -> System.Exception -JustSaying.Messaging.Middleware.HandleMessageContext.HandleMessageContext(string queueName, Amazon.SQS.Model.Message rawMessage, JustSaying.Models.Message message, System.Type messageType, JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater visibilityUpdater, JustSaying.Messaging.Channels.Context.IMessageDeleter messageDeleter, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.Middleware.HandleMessageContext.Message.get -> JustSaying.Models.Message -JustSaying.Messaging.Middleware.HandleMessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.Middleware.HandleMessageContext.MessageDeleter.get -> JustSaying.Messaging.Channels.Context.IMessageDeleter -JustSaying.Messaging.Middleware.HandleMessageContext.MessageType.get -> System.Type -JustSaying.Messaging.Middleware.HandleMessageContext.QueueName.get -> string -JustSaying.Messaging.Middleware.HandleMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Middleware.HandleMessageContext.RawMessage.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Middleware.HandleMessageContext.SetException(System.Exception e) -> void -JustSaying.Messaging.Middleware.HandleMessageContext.VisibilityUpdater.get -> JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater -JustSaying.Messaging.Middleware.HandleMessageContextExtensions -JustSaying.Messaging.Middleware.HandlerInvocationMiddleware -JustSaying.Messaging.Middleware.HandlerInvocationMiddleware.HandlerInvocationMiddleware(System.Func> handlerResolver) -> void -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Build() -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Configure(System.Action configure) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.HandlerMiddlewareBuilder(JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver) -> void -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(System.Func> middlewareFactory) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.UseHandler() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.Logging.LoggingMiddleware -JustSaying.Messaging.Middleware.Logging.LoggingMiddleware.LoggingMiddleware(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware -JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware.MessageContextAccessorMiddleware(JustSaying.Messaging.MessageHandling.IMessageContextAccessor messageContextAccessor) -> void -JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.MiddlewareBase.MiddlewareBase() -> void -JustSaying.Messaging.Middleware.MiddlewareBase.RunAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Middleware.MiddlewareBase.WithNext(JustSaying.Messaging.Middleware.MiddlewareBase next) -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.MiddlewareBuilder -JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware -JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.SqsPostProcessorMiddleware() -> void -JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware -JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.DefaultReceiveMessagesMiddleware(Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.get -> int -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.set -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.get -> string -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.set -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.ReceiveMessagesContext() -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.get -> string -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.set -> void -JustSaying.Messaging.Middleware.StopwatchMiddleware -JustSaying.Messaging.Middleware.StopwatchMiddleware.StopwatchMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor, System.Type handlerType) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor -JustSaying.Messaging.Monitoring.IMessageMonitor.Handled(JustSaying.Models.Message message) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleException(System.Type messageType) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.IncrementThrottlingStatistic() -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.IssuePublishingMessage() -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.Handled(JustSaying.Models.Message message) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleException(System.Type messageType) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IncrementThrottlingStatistic() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IssuePublishingMessage() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.NullOpMessageMonitor() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void -JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, double value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, JustSaying.Messaging.MessageAttributeValue value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, string value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, System.Collections.Generic.IReadOnlyCollection data) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.Delay.get -> System.TimeSpan? -JustSaying.Messaging.PublishMetadata.Delay.set -> void -JustSaying.Messaging.PublishMetadata.MessageAttributes.get -> System.Collections.Generic.IDictionary -JustSaying.Messaging.PublishMetadata.PublishMetadata() -> void -JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.BuildClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.MessagingBusBuilder.BuildPublisher() -> JustSaying.Messaging.IMessagePublisher -JustSaying.MessagingBusBuilder.BuildSubscribers() -> JustSaying.IMessagingBus -JustSaying.MessagingBusBuilder.Client(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Messaging(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.MessagingBusBuilder() -> void -JustSaying.MessagingBusBuilder.Publications(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Services(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Subscriptions(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.WithServiceResolver(JustSaying.Fluent.IServiceResolver serviceResolver) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingConfig -JustSaying.MessagingConfig.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.MessagingConfig.AdditionalSubscriberAccounts.set -> void -JustSaying.MessagingConfig.MessageResponseLogger.get -> System.Action -JustSaying.MessagingConfig.MessageResponseLogger.set -> void -JustSaying.MessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.MessagingConfig.MessageSubjectProvider.set -> void -JustSaying.MessagingConfig.MessagingConfig() -> void -JustSaying.MessagingConfig.PublishFailureBackoff.get -> System.TimeSpan -JustSaying.MessagingConfig.PublishFailureBackoff.set -> void -JustSaying.MessagingConfig.PublishFailureReAttempts.get -> int -JustSaying.MessagingConfig.PublishFailureReAttempts.set -> void -JustSaying.MessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention -JustSaying.MessagingConfig.QueueNamingConvention.set -> void -JustSaying.MessagingConfig.Region.get -> string -JustSaying.MessagingConfig.Region.set -> void -JustSaying.MessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention -JustSaying.MessagingConfig.TopicNamingConvention.set -> void -JustSaying.Naming.DefaultNamingConventions -JustSaying.Naming.DefaultNamingConventions.DefaultNamingConventions() -> void -JustSaying.Naming.IQueueNamingConvention -JustSaying.Naming.IQueueNamingConvention.QueueName() -> string -JustSaying.Naming.ITopicNamingConvention -JustSaying.Naming.ITopicNamingConvention.TopicName() -> string -JustSaying.Naming.NamingConventionExtensions -override JustSaying.AwsTools.ErrorQueue.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -override JustSaying.AwsTools.ErrorQueue.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool -override JustSaying.AwsTools.ErrorQueue.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -override JustSaying.AwsTools.QueueCreation.RedrivePolicy.ToString() -> string -override JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.OnValidating() -> void -override JustSaying.Messaging.MessageHandling.MessageLockResponse.ToString() -> string -override JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.HandleMessageContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -override JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext context, System.Func>> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task> -static JustSaying.AwsTools.JustSayingConstants.DefaultAttributeEncryptionKeyReusePeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultHandlerRetryCount.get -> int -static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryCount.get -> int -static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryInterval.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultSnsAttributeEncryptionKeyId.get -> string -static JustSaying.AwsTools.JustSayingConstants.DefaultSqsAttributeEncryptionKeyId.get -> string -static JustSaying.AwsTools.JustSayingConstants.DefaultVisibilityTimeout.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MaximumDeliveryDelay.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MaximumRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MinimumDeliveryDelay.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MinimumRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.QueueCreation.RedrivePolicy.ConvertFromString(string policy) -> JustSaying.AwsTools.QueueCreation.RedrivePolicy -static JustSaying.Extensions.ChannelExtensions.MergeAsync(System.Collections.Generic.IEnumerable> inputs, System.Threading.Channels.ChannelWriter output, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -static JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation.Validate(this JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings settings) -> void -static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.MaxAmazonMessageCap.get -> int -static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.ParallelHandlerExecutionPerCore.get -> int -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message) -> System.Threading.Tasks.Task -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata) -> System.Threading.Tasks.Task -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -static JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions.UseBackoff(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions.UseErrorHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions.UseExactlyOnce(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, string lockKey, System.TimeSpan? lockDuration = null) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.HandleMessageContextExtensions.MessageAs(this JustSaying.Messaging.Middleware.HandleMessageContext context) -> TMessage -static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseDefaults(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Func> handler) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions.UseMessageContextAccessor(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions.UseStopwatch(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MiddlewareBuilder.BuildAsync(params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase -static JustSaying.Messaging.Middleware.MiddlewareBuilder.WithAsync(this JustSaying.Messaging.Middleware.MiddlewareBase inner, params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase -static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.IQueueNamingConvention namingConvention, string overrideQueueName) -> string -static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.ITopicNamingConvention namingConvention, string overrideTopicName) -> string -virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceConfig config) -> void -virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SQS.AmazonSQSConfig config) -> void -virtual JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.OnValidating() -> void -virtual JustSaying.MessagingConfig.Validate() -> void -virtual JustSaying.Naming.DefaultNamingConventions.QueueName() -> string -virtual JustSaying.Naming.DefaultNamingConventions.TopicName() -> string diff --git a/src/JustSaying/PublicAPI/net461/PublicAPI.Unshipped.txt b/src/JustSaying/PublicAPI/net461/PublicAPI.Unshipped.txt index e69de29bb..ec6ede7fa 100644 --- a/src/JustSaying/PublicAPI/net461/PublicAPI.Unshipped.txt +++ b/src/JustSaying/PublicAPI/net461/PublicAPI.Unshipped.txt @@ -0,0 +1,4 @@ +JustSaying.AwsTools.MessageHandling.PublishException.PublishException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void diff --git a/src/JustSaying/PublicAPI/net8.0/PublicAPI.Shipped.txt b/src/JustSaying/PublicAPI/net8.0/PublicAPI.Shipped.txt index a1c0546c3..e69de29bb 100644 --- a/src/JustSaying/PublicAPI/net8.0/PublicAPI.Shipped.txt +++ b/src/JustSaying/PublicAPI/net8.0/PublicAPI.Shipped.txt @@ -1,745 +0,0 @@ -abstract JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -abstract JustSaying.Messaging.Middleware.MiddlewareBase.RunInnerAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -const JustSaying.AwsTools.JustSayingConstants.AttributeArn = "QueueArn" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeDeliveryDelay = "DelaySeconds" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyId = "KmsMasterKeyId" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyReusePeriodSecondId = "KmsDataKeyReusePeriodSeconds" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributePolicy = "Policy" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeRedrivePolicy = "RedrivePolicy" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeRetentionPeriod = "MessageRetentionPeriod" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeVisibilityTimeout = "VisibilityTimeout" -> string -JustSaying.AwsTools.AwsClientFactoryProxy -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy() -> void -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Func awsClientFactoryFunc) -> void -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Lazy factory) -> void -JustSaying.AwsTools.AwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.AwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void -JustSaying.AwsTools.DefaultAwsClientFactory -JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory() -> void -JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory(Amazon.Runtime.AWSCredentials customCredentials) -> void -JustSaying.AwsTools.DefaultAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.DefaultAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.get -> System.Uri -JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.set -> void -JustSaying.AwsTools.ErrorQueue -JustSaying.AwsTools.ErrorQueue.ErrorQueue(Amazon.RegionEndpoint region, string sourceQueueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.IAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.IAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.IAwsClientFactoryProxy -JustSaying.AwsTools.IAwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.IAwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void -JustSaying.AwsTools.JustSayingConstants -JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher -JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.MessageDispatcher(JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Monitoring.IMessageMonitor messagingMonitor, JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap middlewareMap, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Add(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Contains(string queueName, System.Type messageType) -> bool -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Get(string queueName, System.Type messageType) -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.MiddlewareMap() -> void -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Types.get -> System.Collections.Generic.IEnumerable -JustSaying.AwsTools.MessageHandling.ISqsQueue -JustSaying.AwsTools.MessageHandling.ISqsQueue.Arn.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.QueueName.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> -JustSaying.AwsTools.MessageHandling.ISqsQueue.RegionSystemName.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.Uri.get -> System.Uri -JustSaying.AwsTools.MessageHandling.MessageResponse -JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.get -> System.Net.HttpStatusCode? -JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.set -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.get -> string -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.set -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageResponse() -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.get -> Amazon.Runtime.ResponseMetadata -JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.set -> void -JustSaying.AwsTools.MessageHandling.PublishException -JustSaying.AwsTools.MessageHandling.PublishException.PublishException() -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message) -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message, System.Exception inner) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.Queue.get -> JustSaying.AwsTools.MessageHandling.ISqsQueue -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(System.Func startupTask, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.StartupTask.get -> System.Func -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Client.get -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.get -> System.Action -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.set -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(string topicArn, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName -JustSaying.AwsTools.MessageHandling.SnsTopicByName.ApplyTagsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateWithEncryptionAsync(JustSaying.AwsTools.QueueCreation.ServerSideEncryption config, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.EnsurePolicyIsUpdatedAsync(System.Collections.Generic.IReadOnlyCollection additionalSubscriberAccounts) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.SnsTopicByName.SnsTopicByName(string topicName, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.get -> System.Collections.Generic.IDictionary -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.set -> void -JustSaying.AwsTools.MessageHandling.SnsTopicByName.TopicName.get -> string -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.GetMessageInContext(JustSaying.Models.Message message) -> string -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.get -> System.Action -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.set -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.QueueUrl.get -> System.Uri -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(System.Uri queueUrl, Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByName -JustSaying.AwsTools.MessageHandling.SqsQueueByName.EnsureQueueAndErrorQueueExistAndAllAttributesAreUpdatedAsync(JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByName.SqsQueueByName(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, int retryCountBeforeSendingToErrorQueue, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Client.get -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Logger.get -> Microsoft.Extensions.Logging.ILogger -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueName.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.RegionSystemName.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.SqsQueueByNameBase(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Uri.get -> System.Uri -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.AmazonQueueCreator(JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException() -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message) -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message, System.Exception inner) -> void -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.RedrivePolicy -JustSaying.AwsTools.QueueCreation.RedrivePolicy.DeadLetterQueue.get -> string -JustSaying.AwsTools.QueueCreation.RedrivePolicy.DeadLetterQueue.set -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.MaximumReceives.get -> int -JustSaying.AwsTools.QueueCreation.RedrivePolicy.MaximumReceives.set -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.RedrivePolicy() -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.RedrivePolicy(int maximumReceives, string deadLetterQueue) -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.set -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.get -> string -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.set -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.ServerSideEncryption() -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.set -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.get -> System.Func -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.set -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.SnsWriteConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ApplyQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.get -> bool -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.get -> string -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.get -> int -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.SqsBasicConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.Validate() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.ApplyTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SqsReadConfiguration(JustSaying.AwsTools.QueueCreation.SubscriptionType subscriptionType) -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionType.get -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.get -> System.Collections.Generic.Dictionary -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.set -> void -JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration -JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration.SqsWriteConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SubscriptionType.PointToPoint = 1 -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SubscriptionType.ToTopic = 0 -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.Extensions.ChannelExtensions -JustSaying.Fluent.AccountAddressProvider -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void -JustSaying.Fluent.AccountAddressProvider.GetQueueUri(string queueName) -> System.Uri -JustSaying.Fluent.AccountAddressProvider.GetQueueUriByConvention() -> System.Uri -JustSaying.Fluent.AccountAddressProvider.GetTopicArn(string topicName) -> string -JustSaying.Fluent.AccountAddressProvider.GetTopicArnByConvention() -> string -JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.Build() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.Fluent.AwsClientFactoryBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithAnonymousCredentials() -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithBasicCredentials(string accessKey, string secretKey) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithClientFactory(System.Func clientFactory) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithCredentials(Amazon.Runtime.AWSCredentials credentials) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUri(System.Uri uri) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUrl(string url) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithSessionCredentials(string accessKeyId, string secretAccessKey, string token) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.IMessageBusConfigurationContributor -JustSaying.Fluent.IMessageBusConfigurationContributor.Configure(JustSaying.MessagingBusBuilder builder) -> void -JustSaying.Fluent.IServiceResolver -JustSaying.Fluent.IServiceResolver.ResolveOptionalService() -> T -JustSaying.Fluent.IServiceResolver.ResolveService() -> T -JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.ISubscriptionBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver, JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues creator, JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactoryProxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.ISubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.Build() -> JustSaying.IMessagingConfig -JustSaying.Fluent.MessagingConfigurationBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccount(string accountId) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(params string[] regions) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(System.Collections.Generic.IEnumerable accountIds) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageResponseLogger(System.Action logger) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageSubjectProvider(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider subjectProvider) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureBackoff(System.TimeSpan value) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureReattempts(int value) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(Amazon.RegionEndpoint region) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(string region) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueue() -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueue(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueArn(string queueArn) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueUri(System.Uri queueUrl) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueUrl(string queueUrl) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopic() -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopic(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopicArn(string topicArn, System.Action> configure = null) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.QueueAddressConfiguration -JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.get -> System.Action -JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.set -> void -JustSaying.Fluent.QueueAddressConfiguration.QueueAddressConfiguration() -> void -JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.get -> string -JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.set -> void -JustSaying.Fluent.QueueAddressConfiguration.Validate() -> void -JustSaying.Fluent.QueueAddressPublicationBuilder -JustSaying.Fluent.QueueAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.QueueAddressSubscriptionBuilder -JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueAddressSubscriptionBuilder -JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithName(string queueName) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithDefaultQueue() -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(JustSaying.IHandlerResolver handlerResolver) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(System.Func handlerResolver) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(System.Func loggerFactory) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithMessageContextAccessor(System.Func contextAccessor) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithMessageMonitoring(System.Func monitoring) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.SnsWriteConfigurationBuilder -JustSaying.Fluent.SnsWriteConfigurationBuilder.SnsWriteConfigurationBuilder() -> void -JustSaying.Fluent.SnsWriteConfigurationBuilder.WithErrorHandler(System.Func handler) -> JustSaying.Fluent.SnsWriteConfigurationBuilder -JustSaying.Fluent.SqsConfigurationBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(JustSaying.AwsTools.QueueCreation.ServerSideEncryption encryption) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(string masterKeyId) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueue() -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueueOptOut(bool value) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithMessageRetention(System.TimeSpan value) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithNoErrorQueue() -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithVisibilityTimeout(System.TimeSpan value) -> TBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder.SqsReadConfigurationBuilder() -> void -JustSaying.Fluent.SqsReadConfigurationBuilder.WithSubscriptionGroup(string subscriptionGroupName) -> JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder.WithTopicSourceAccount(string id) -> JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsWriteConfigurationBuilder -JustSaying.Fluent.SqsWriteConfigurationBuilder.SqsWriteConfigurationBuilder() -> void -JustSaying.Fluent.SqsWriteConfigurationBuilder.WithQueueName(string name) -> JustSaying.Fluent.SqsWriteConfigurationBuilder -JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueue() -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueue(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueArn(string queueArn, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueUri(System.Uri queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueUrl(string queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic() -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic(string topicNameOverride, System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.WithDefaults(System.Action configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.WithSubscriptionGroup(string groupName, System.Action action) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.TopicAddressPublicationBuilder -JustSaying.Fluent.TopicAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.TopicAddressPublicationBuilder.WithExceptionHandler(System.Func exceptionHandler) -> JustSaying.Fluent.TopicAddressPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.get -> System.Func -JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.set -> void -JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(System.Func topicNameCustomizer) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.IntoDefaultTopic() -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.HandlerNotRegisteredWithContainerException -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException() -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message) -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message, System.Exception inner) -> void -JustSaying.HandlerResolutionContext -JustSaying.HandlerResolutionContext.HandlerResolutionContext(string queueName) -> void -JustSaying.HandlerResolutionContext.QueueName.get -> string -JustSaying.IHandlerResolver -JustSaying.IHandlerResolver.ResolveHandler(JustSaying.HandlerResolutionContext context) -> JustSaying.Messaging.MessageHandling.IHandlerAsync -JustSaying.IMessagingBus -JustSaying.IMessagingConfig -JustSaying.IMessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.IMessagingConfig.MessageSubjectProvider.set -> void -JustSaying.IMessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention -JustSaying.IMessagingConfig.QueueNamingConvention.set -> void -JustSaying.IMessagingConfig.Region.get -> string -JustSaying.IMessagingConfig.Region.set -> void -JustSaying.IMessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention -JustSaying.IMessagingConfig.TopicNamingConvention.set -> void -JustSaying.IMessagingConfig.Validate() -> void -JustSaying.IPublishConfiguration -JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.set -> void -JustSaying.IPublishConfiguration.MessageResponseLogger.get -> System.Action -JustSaying.IPublishConfiguration.MessageResponseLogger.set -> void -JustSaying.IPublishConfiguration.PublishFailureBackoff.get -> System.TimeSpan -JustSaying.IPublishConfiguration.PublishFailureBackoff.set -> void -JustSaying.IPublishConfiguration.PublishFailureReAttempts.get -> int -JustSaying.IPublishConfiguration.PublishFailureReAttempts.set -> void -JustSaying.IStartable -JustSaying.IStartable.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus -JustSaying.JustSayingBus.AddMessageMiddleware(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> void -JustSaying.JustSayingBus.AddMessagePublisher(JustSaying.Messaging.IMessagePublisher messagePublisher) -> void -JustSaying.JustSayingBus.AddQueue(string subscriptionGroup, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.JustSayingBus.Completion.get -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.Config.get -> JustSaying.IMessagingConfig -JustSaying.JustSayingBus.Dispose() -> void -JustSaying.JustSayingBus.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.SerializationRegister.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister -JustSaying.JustSayingBus.SetGroupSettings(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary settings) -> void -JustSaying.JustSayingBus.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IMessageDeleter -JustSaying.Messaging.Channels.Context.IMessageDeleter.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater -JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IQueueMessageContext -JustSaying.Messaging.Channels.Context.IQueueMessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueName.get -> string -JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Channels.Context.QueueMessageContext -JustSaying.Messaging.Channels.Context.QueueMessageContext.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.QueueMessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueName.get -> string -JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Channels.Context.QueueMessageContext.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.IsPaused.get -> bool -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Pause() -> void -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Resume() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.IsPaused.get -> bool -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.MessageReceivePauseSignal() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Pause() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Resume() -> void -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.SubscriptionGroupCollection(System.Collections.Generic.IList subscriptionGroups, Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueue(JustSaying.AwsTools.MessageHandling.ISqsQueue sqsQueue) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueues(System.Collections.Generic.IEnumerable sqsQueues) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.Build(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.SubscriptionGroupConfigBuilder(string groupName) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Name.get -> string -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Queues.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SqsMiddleware.get -> JustSaying.Messaging.Middleware.MiddlewareBase> -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SubscriptionGroupSettingsBuilder() -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithCustomMiddleware(JustSaying.Messaging.Middleware.MiddlewareBase> middleware) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation -JustSaying.Messaging.IMessagePublisher -JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Interrogation.IInterrogable -JustSaying.Messaging.Interrogation.IInterrogable.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Interrogation.InterrogationResult.Data.get -> object -JustSaying.Messaging.Interrogation.InterrogationResult.InterrogationResult(object data) -> void -JustSaying.Messaging.MessageAttributeValue -JustSaying.Messaging.MessageAttributeValue.BinaryValue.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.Messaging.MessageAttributeValue.BinaryValue.set -> void -JustSaying.Messaging.MessageAttributeValue.DataType.get -> string -JustSaying.Messaging.MessageAttributeValue.DataType.set -> void -JustSaying.Messaging.MessageAttributeValue.MessageAttributeValue() -> void -JustSaying.Messaging.MessageAttributeValue.StringValue.get -> string -JustSaying.Messaging.MessageAttributeValue.StringValue.set -> void -JustSaying.Messaging.MessageHandling.IHandlerAsync -JustSaying.Messaging.MessageHandling.IHandlerAsync.Handle(T message) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageContextAccessor -JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.set -> void -JustSaying.Messaging.MessageHandling.IMessageContextReader -JustSaying.Messaging.MessageHandling.IMessageContextReader.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.IMessageLockAsync -JustSaying.Messaging.MessageHandling.IMessageLockAsync.ReleaseLockAsync(string key) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockAsync(string key, System.TimeSpan howLong) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockPermanentlyAsync(string key) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.ListHandler -JustSaying.Messaging.MessageHandling.ListHandler.Handle(T message) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.ListHandler.ListHandler(System.Collections.Generic.IEnumerable> handlers) -> void -JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageHandling.MessageAttributes.Get(string value) -> JustSaying.Messaging.MessageAttributeValue -JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes() -> void -JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes(System.Collections.Generic.Dictionary attributes) -> void -JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.MessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.MessageHandling.MessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageHandling.MessageContext.MessageContext(Amazon.SQS.Model.Message message, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.MessageHandling.MessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.MessageHandling.MessageContextAccessor -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.set -> void -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContextAccessor() -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse -JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.get -> bool -JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.get -> System.DateTimeOffset -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.get -> long -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.get -> bool -JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.MessageLockResponse() -> void -JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy -JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy.GetBackoffDuration(JustSaying.Models.Message message, int approximateReceiveCount, System.Exception lastException = null) -> System.TimeSpan -JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults -JustSaying.Messaging.MessagePublisherExtensions -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GenericMessageSubjectProvider() -> void -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory -JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.AddSerializer() -> void -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.IMessageSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException() -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message) -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message, System.Exception innerException) -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.AddSerializer() -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.MessageSerializationRegister(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory serializationFactory) -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string -JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.Message.get -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageWithAttributes(JustSaying.Models.Message message, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory() -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory(Newtonsoft.Json.JsonSerializerSettings settings) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer() -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer(Newtonsoft.Json.JsonSerializerSettings settings) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.NonGenericMessageSubjectProvider() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory(System.Text.Json.JsonSerializerOptions options) -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer(System.Text.Json.JsonSerializerOptions options) -> void -JustSaying.Messaging.MessageSerialization.TypeSerializer -JustSaying.Messaging.MessageSerialization.TypeSerializer.Serializer.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.TypeSerializer.Type.get -> System.Type -JustSaying.Messaging.MessageSerialization.TypeSerializer.TypeSerializer(System.Type type, JustSaying.Messaging.MessageSerialization.IMessageSerializer serializer) -> void -JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware -JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware.BackoffMiddleware(JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware.ErrorHandlerMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ExactlyOnceMiddleware -JustSaying.Messaging.Middleware.ExactlyOnceMiddleware.ExactlyOnceMiddleware(JustSaying.Messaging.MessageHandling.IMessageLockAsync messageLock, System.TimeSpan timeout, string handlerName, Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Middleware.HandleMessageContext -JustSaying.Messaging.Middleware.HandleMessageContext.HandledException.get -> System.Exception -JustSaying.Messaging.Middleware.HandleMessageContext.HandleMessageContext(string queueName, Amazon.SQS.Model.Message rawMessage, JustSaying.Models.Message message, System.Type messageType, JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater visibilityUpdater, JustSaying.Messaging.Channels.Context.IMessageDeleter messageDeleter, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.Middleware.HandleMessageContext.Message.get -> JustSaying.Models.Message -JustSaying.Messaging.Middleware.HandleMessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.Middleware.HandleMessageContext.MessageDeleter.get -> JustSaying.Messaging.Channels.Context.IMessageDeleter -JustSaying.Messaging.Middleware.HandleMessageContext.MessageType.get -> System.Type -JustSaying.Messaging.Middleware.HandleMessageContext.QueueName.get -> string -JustSaying.Messaging.Middleware.HandleMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Middleware.HandleMessageContext.RawMessage.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Middleware.HandleMessageContext.SetException(System.Exception e) -> void -JustSaying.Messaging.Middleware.HandleMessageContext.VisibilityUpdater.get -> JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater -JustSaying.Messaging.Middleware.HandleMessageContextExtensions -JustSaying.Messaging.Middleware.HandlerInvocationMiddleware -JustSaying.Messaging.Middleware.HandlerInvocationMiddleware.HandlerInvocationMiddleware(System.Func> handlerResolver) -> void -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Build() -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Configure(System.Action configure) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.HandlerMiddlewareBuilder(JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver) -> void -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(System.Func> middlewareFactory) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.UseHandler() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.Logging.LoggingMiddleware -JustSaying.Messaging.Middleware.Logging.LoggingMiddleware.LoggingMiddleware(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware -JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware.MessageContextAccessorMiddleware(JustSaying.Messaging.MessageHandling.IMessageContextAccessor messageContextAccessor) -> void -JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.MiddlewareBase.MiddlewareBase() -> void -JustSaying.Messaging.Middleware.MiddlewareBase.RunAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Middleware.MiddlewareBase.WithNext(JustSaying.Messaging.Middleware.MiddlewareBase next) -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.MiddlewareBuilder -JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware -JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.SqsPostProcessorMiddleware() -> void -JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware -JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.DefaultReceiveMessagesMiddleware(Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.get -> int -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.set -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.get -> string -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.set -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.ReceiveMessagesContext() -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.get -> string -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.set -> void -JustSaying.Messaging.Middleware.StopwatchMiddleware -JustSaying.Messaging.Middleware.StopwatchMiddleware.StopwatchMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor, System.Type handlerType) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor -JustSaying.Messaging.Monitoring.IMessageMonitor.Handled(JustSaying.Models.Message message) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleException(System.Type messageType) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.IncrementThrottlingStatistic() -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.IssuePublishingMessage() -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.Handled(JustSaying.Models.Message message) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleException(System.Type messageType) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IncrementThrottlingStatistic() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IssuePublishingMessage() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.NullOpMessageMonitor() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void -JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, double value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, JustSaying.Messaging.MessageAttributeValue value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, string value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, System.Collections.Generic.IReadOnlyCollection data) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.Delay.get -> System.TimeSpan? -JustSaying.Messaging.PublishMetadata.Delay.set -> void -JustSaying.Messaging.PublishMetadata.MessageAttributes.get -> System.Collections.Generic.IDictionary -JustSaying.Messaging.PublishMetadata.PublishMetadata() -> void -JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.BuildClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.MessagingBusBuilder.BuildPublisher() -> JustSaying.Messaging.IMessagePublisher -JustSaying.MessagingBusBuilder.BuildSubscribers() -> JustSaying.IMessagingBus -JustSaying.MessagingBusBuilder.Client(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Messaging(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.MessagingBusBuilder() -> void -JustSaying.MessagingBusBuilder.Publications(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Services(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Subscriptions(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.WithServiceResolver(JustSaying.Fluent.IServiceResolver serviceResolver) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingConfig -JustSaying.MessagingConfig.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.MessagingConfig.AdditionalSubscriberAccounts.set -> void -JustSaying.MessagingConfig.MessageResponseLogger.get -> System.Action -JustSaying.MessagingConfig.MessageResponseLogger.set -> void -JustSaying.MessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.MessagingConfig.MessageSubjectProvider.set -> void -JustSaying.MessagingConfig.MessagingConfig() -> void -JustSaying.MessagingConfig.PublishFailureBackoff.get -> System.TimeSpan -JustSaying.MessagingConfig.PublishFailureBackoff.set -> void -JustSaying.MessagingConfig.PublishFailureReAttempts.get -> int -JustSaying.MessagingConfig.PublishFailureReAttempts.set -> void -JustSaying.MessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention -JustSaying.MessagingConfig.QueueNamingConvention.set -> void -JustSaying.MessagingConfig.Region.get -> string -JustSaying.MessagingConfig.Region.set -> void -JustSaying.MessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention -JustSaying.MessagingConfig.TopicNamingConvention.set -> void -JustSaying.Naming.DefaultNamingConventions -JustSaying.Naming.DefaultNamingConventions.DefaultNamingConventions() -> void -JustSaying.Naming.IQueueNamingConvention -JustSaying.Naming.IQueueNamingConvention.QueueName() -> string -JustSaying.Naming.ITopicNamingConvention -JustSaying.Naming.ITopicNamingConvention.TopicName() -> string -JustSaying.Naming.NamingConventionExtensions -override JustSaying.AwsTools.ErrorQueue.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -override JustSaying.AwsTools.ErrorQueue.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool -override JustSaying.AwsTools.ErrorQueue.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -override JustSaying.AwsTools.QueueCreation.RedrivePolicy.ToString() -> string -override JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.OnValidating() -> void -override JustSaying.Messaging.MessageHandling.MessageLockResponse.ToString() -> string -override JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.HandleMessageContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -override JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext context, System.Func>> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task> -static JustSaying.AwsTools.JustSayingConstants.DefaultAttributeEncryptionKeyReusePeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultHandlerRetryCount.get -> int -static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryCount.get -> int -static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryInterval.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultSnsAttributeEncryptionKeyId.get -> string -static JustSaying.AwsTools.JustSayingConstants.DefaultSqsAttributeEncryptionKeyId.get -> string -static JustSaying.AwsTools.JustSayingConstants.DefaultVisibilityTimeout.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MaximumDeliveryDelay.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MaximumRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MinimumDeliveryDelay.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MinimumRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.QueueCreation.RedrivePolicy.ConvertFromString(string policy) -> JustSaying.AwsTools.QueueCreation.RedrivePolicy -static JustSaying.Extensions.ChannelExtensions.MergeAsync(System.Collections.Generic.IEnumerable> inputs, System.Threading.Channels.ChannelWriter output, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -static JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation.Validate(this JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings settings) -> void -static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.MaxAmazonMessageCap.get -> int -static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.ParallelHandlerExecutionPerCore.get -> int -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message) -> System.Threading.Tasks.Task -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata) -> System.Threading.Tasks.Task -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -static JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions.UseBackoff(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions.UseErrorHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions.UseExactlyOnce(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, string lockKey, System.TimeSpan? lockDuration = null) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.HandleMessageContextExtensions.MessageAs(this JustSaying.Messaging.Middleware.HandleMessageContext context) -> TMessage -static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseDefaults(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Func> handler) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions.UseMessageContextAccessor(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions.UseStopwatch(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MiddlewareBuilder.BuildAsync(params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase -static JustSaying.Messaging.Middleware.MiddlewareBuilder.WithAsync(this JustSaying.Messaging.Middleware.MiddlewareBase inner, params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase -static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.IQueueNamingConvention namingConvention, string overrideQueueName) -> string -static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.ITopicNamingConvention namingConvention, string overrideTopicName) -> string -virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceConfig config) -> void -virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SQS.AmazonSQSConfig config) -> void -virtual JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.OnValidating() -> void -virtual JustSaying.MessagingConfig.Validate() -> void -virtual JustSaying.Naming.DefaultNamingConventions.QueueName() -> string -virtual JustSaying.Naming.DefaultNamingConventions.TopicName() -> string diff --git a/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt b/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt index ac3e28b2f..e69de29bb 100644 --- a/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt +++ b/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt @@ -1,749 +0,0 @@ -abstract JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -abstract JustSaying.Messaging.Middleware.MiddlewareBase.RunInnerAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -const JustSaying.AwsTools.JustSayingConstants.AttributeArn = "QueueArn" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeDeliveryDelay = "DelaySeconds" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyId = "KmsMasterKeyId" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeEncryptionKeyReusePeriodSecondId = "KmsDataKeyReusePeriodSeconds" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributePolicy = "Policy" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeRedrivePolicy = "RedrivePolicy" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeRetentionPeriod = "MessageRetentionPeriod" -> string -const JustSaying.AwsTools.JustSayingConstants.AttributeVisibilityTimeout = "VisibilityTimeout" -> string -JustSaying.AwsTools.AwsClientFactoryProxy -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy() -> void -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Func awsClientFactoryFunc) -> void -JustSaying.AwsTools.AwsClientFactoryProxy.AwsClientFactoryProxy(System.Lazy factory) -> void -JustSaying.AwsTools.AwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.AwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void -JustSaying.AwsTools.DefaultAwsClientFactory -JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory() -> void -JustSaying.AwsTools.DefaultAwsClientFactory.DefaultAwsClientFactory(Amazon.Runtime.AWSCredentials customCredentials) -> void -JustSaying.AwsTools.DefaultAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.DefaultAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.get -> System.Uri -JustSaying.AwsTools.DefaultAwsClientFactory.ServiceUri.set -> void -JustSaying.AwsTools.ErrorQueue -JustSaying.AwsTools.ErrorQueue.ErrorQueue(Amazon.RegionEndpoint region, string sourceQueueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.IAwsClientFactory.GetSnsClient(Amazon.RegionEndpoint region) -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.IAwsClientFactory.GetSqsClient(Amazon.RegionEndpoint region) -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.IAwsClientFactoryProxy -JustSaying.AwsTools.IAwsClientFactoryProxy.GetAwsClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.AwsTools.IAwsClientFactoryProxy.SetAwsClientFactory(System.Func func) -> void -JustSaying.AwsTools.JustSayingConstants -JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher -JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.DispatchMessageAsync(JustSaying.Messaging.Channels.Context.IQueueMessageContext messageContext, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.Dispatch.MessageDispatcher.MessageDispatcher(JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Monitoring.IMessageMonitor messagingMonitor, JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap middlewareMap, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Add(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Contains(string queueName, System.Type messageType) -> bool -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Get(string queueName, System.Type messageType) -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.MiddlewareMap() -> void -JustSaying.AwsTools.MessageHandling.Dispatch.MiddlewareMap.Types.get -> System.Collections.Generic.IEnumerable -JustSaying.AwsTools.MessageHandling.ISqsQueue -JustSaying.AwsTools.MessageHandling.ISqsQueue.Arn.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.QueueName.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> -JustSaying.AwsTools.MessageHandling.ISqsQueue.RegionSystemName.get -> string -JustSaying.AwsTools.MessageHandling.ISqsQueue.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.ISqsQueue.Uri.get -> System.Uri -JustSaying.AwsTools.MessageHandling.MessageResponse -JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.get -> System.Net.HttpStatusCode? -JustSaying.AwsTools.MessageHandling.MessageResponse.HttpStatusCode.set -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.get -> string -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageId.set -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.MessageResponse() -> void -JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.get -> Amazon.Runtime.ResponseMetadata -JustSaying.AwsTools.MessageHandling.MessageResponse.ResponseMetadata.set -> void -JustSaying.AwsTools.MessageHandling.PublishException -JustSaying.AwsTools.MessageHandling.PublishException.PublishException() -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message) -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(string message, System.Exception inner) -> void -JustSaying.AwsTools.MessageHandling.PublishException.PublishException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.Queue.get -> JustSaying.AwsTools.MessageHandling.ISqsQueue -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.QueueWithAsyncStartup(System.Func startupTask, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup.StartupTask.get -> System.Func -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Client.get -> Amazon.SimpleNotificationService.IAmazonSimpleNotificationService -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.get -> System.Action -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.MessageResponseLogger.set -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.SnsMessagePublisher(string topicArn, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, System.Func handleException = null) -> void -JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName -JustSaying.AwsTools.MessageHandling.SnsTopicByName.ApplyTagsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.CreateWithEncryptionAsync(JustSaying.AwsTools.QueueCreation.ServerSideEncryption config, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.EnsurePolicyIsUpdatedAsync(System.Collections.Generic.IReadOnlyCollection additionalSubscriberAccounts) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.SnsTopicByName.SnsTopicByName(string topicName, Amazon.SimpleNotificationService.IAmazonSimpleNotificationService client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.get -> System.Collections.Generic.IDictionary -JustSaying.AwsTools.MessageHandling.SnsTopicByName.Tags.set -> void -JustSaying.AwsTools.MessageHandling.SnsTopicByName.TopicName.get -> string -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.GetMessageInContext(JustSaying.Models.Message message) -> string -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.get -> System.Action -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.MessageResponseLogger.set -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.QueueUrl.get -> System.Uri -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.SqsMessagePublisher(System.Uri queueUrl, Amazon.SQS.IAmazonSQS client, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsMessagePublisher.StartAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByName -JustSaying.AwsTools.MessageHandling.SqsQueueByName.EnsureQueueAndErrorQueueExistAndAllAttributesAreUpdatedAsync(JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByName.SqsQueueByName(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, int retryCountBeforeSendingToErrorQueue, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Arn.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeoutInSeconds, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Client.get -> Amazon.SQS.IAmazonSQS -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteMessageAsync(string queueUrl, string receiptHandle, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Logger.get -> Microsoft.Extensions.Logging.ILogger -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueName.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ReceiveMessagesAsync(string queueUrl, int maxNumOfMessages, int secondsWaitTime, System.Collections.Generic.IList attributesToLoad, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task> -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.RegionSystemName.get -> string -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.SqsQueueByNameBase(Amazon.RegionEndpoint region, string queueName, Amazon.SQS.IAmazonSQS client, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.TagQueueAsync(string queueUrl, System.Collections.Generic.Dictionary tags, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Uri.get -> System.Uri -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.AmazonQueueCreator(JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.AmazonQueueCreator.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException() -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message) -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(string message, System.Exception inner) -> void -JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureQueueExists(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues.EnsureTopicExistsWithQueueSubscribed(string region, JustSaying.AwsTools.QueueCreation.SqsReadConfiguration queueConfig) -> JustSaying.AwsTools.MessageHandling.QueueWithAsyncStartup -JustSaying.AwsTools.QueueCreation.RedrivePolicy -JustSaying.AwsTools.QueueCreation.RedrivePolicy.DeadLetterQueue.get -> string -JustSaying.AwsTools.QueueCreation.RedrivePolicy.DeadLetterQueue.set -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.MaximumReceives.get -> int -JustSaying.AwsTools.QueueCreation.RedrivePolicy.MaximumReceives.set -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.RedrivePolicy() -> void -JustSaying.AwsTools.QueueCreation.RedrivePolicy.RedrivePolicy(int maximumReceives, string deadLetterQueue) -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsDataKeyReusePeriod.set -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.get -> string -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.KmsMasterKeyId.set -> void -JustSaying.AwsTools.QueueCreation.ServerSideEncryption.ServerSideEncryption() -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.Encryption.set -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.get -> System.Func -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.HandleException.set -> void -JustSaying.AwsTools.QueueCreation.SnsWriteConfiguration.SnsWriteConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ApplyQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.DeliveryDelay.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.get -> bool -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueOptOut.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ErrorQueueRetentionPeriod.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.MessageRetention.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.get -> string -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.QueueName.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.get -> int -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.RetryCountBeforeSendingToErrorQueue.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.get -> JustSaying.AwsTools.QueueCreation.ServerSideEncryption -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.ServerSideEncryption.set -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.SqsBasicConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.Validate() -> void -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.get -> System.TimeSpan -JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.VisibilityTimeout.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.ApplyTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.FilterPolicy.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.PublishEndpoint.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SqsReadConfiguration(JustSaying.AwsTools.QueueCreation.SubscriptionType subscriptionType) -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionGroupName.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.SubscriptionType.get -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.get -> System.Collections.Generic.Dictionary -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.Tags.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicName.set -> void -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.get -> string -JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.TopicSourceAccount.set -> void -JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration -JustSaying.AwsTools.QueueCreation.SqsWriteConfiguration.SqsWriteConfiguration() -> void -JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SubscriptionType.PointToPoint = 1 -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.AwsTools.QueueCreation.SubscriptionType.ToTopic = 0 -> JustSaying.AwsTools.QueueCreation.SubscriptionType -JustSaying.Extensions.ChannelExtensions -JustSaying.Fluent.AccountAddressProvider -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, Amazon.RegionEndpoint regionEndpoint, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName) -> void -JustSaying.Fluent.AccountAddressProvider.AccountAddressProvider(string accountId, string regionName, JustSaying.Naming.IQueueNamingConvention queueNamingConvention, JustSaying.Naming.ITopicNamingConvention topicNamingConvention) -> void -JustSaying.Fluent.AccountAddressProvider.GetQueueUri(string queueName) -> System.Uri -JustSaying.Fluent.AccountAddressProvider.GetQueueUriByConvention() -> System.Uri -JustSaying.Fluent.AccountAddressProvider.GetTopicArn(string topicName) -> string -JustSaying.Fluent.AccountAddressProvider.GetTopicArnByConvention() -> string -JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.Build() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.Fluent.AwsClientFactoryBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithAnonymousCredentials() -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithBasicCredentials(string accessKey, string secretKey) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithClientFactory(System.Func clientFactory) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithCredentials(Amazon.Runtime.AWSCredentials credentials) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUri(System.Uri uri) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithServiceUrl(string url) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.AwsClientFactoryBuilder.WithSessionCredentials(string accessKeyId, string secretAccessKey, string token) -> JustSaying.Fluent.AwsClientFactoryBuilder -JustSaying.Fluent.IMessageBusConfigurationContributor -JustSaying.Fluent.IMessageBusConfigurationContributor.Configure(JustSaying.MessagingBusBuilder builder) -> void -JustSaying.Fluent.IServiceResolver -JustSaying.Fluent.IServiceResolver.ResolveOptionalService() -> T -JustSaying.Fluent.IServiceResolver.ResolveService() -> T -JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.ISubscriptionBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver, JustSaying.AwsTools.QueueCreation.IVerifyAmazonQueues creator, JustSaying.AwsTools.IAwsClientFactoryProxy awsClientFactoryProxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.ISubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.Build() -> JustSaying.IMessagingConfig -JustSaying.Fluent.MessagingConfigurationBuilder.BusBuilder.get -> JustSaying.MessagingBusBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccount(string accountId) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(params string[] regions) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithAdditionalSubscriberAccounts(System.Collections.Generic.IEnumerable accountIds) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageResponseLogger(System.Action logger) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithMessageSubjectProvider(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider subjectProvider) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureBackoff(System.TimeSpan value) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithPublishFailureReattempts(int value) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention(JustSaying.Naming.IQueueNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithQueueNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(Amazon.RegionEndpoint region) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithRegion(string region) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention(JustSaying.Naming.ITopicNamingConvention namingConvention) -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.MessagingConfigurationBuilder.WithTopicNamingConvention() -> JustSaying.Fluent.MessagingConfigurationBuilder -JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueue() -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueue(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueArn(string queueArn) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueUri(System.Uri queueUrl) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithQueueUrl(string queueUrl) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopic() -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopic(System.Action> configure) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.PublicationsBuilder.WithTopicArn(string topicArn, System.Action> configure = null) -> JustSaying.Fluent.PublicationsBuilder -JustSaying.Fluent.QueueAddressConfiguration -JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.get -> System.Action -JustSaying.Fluent.QueueAddressConfiguration.MiddlewareConfiguration.set -> void -JustSaying.Fluent.QueueAddressConfiguration.QueueAddressConfiguration() -> void -JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.get -> string -JustSaying.Fluent.QueueAddressConfiguration.SubscriptionGroupName.set -> void -JustSaying.Fluent.QueueAddressConfiguration.Validate() -> void -JustSaying.Fluent.QueueAddressPublicationBuilder -JustSaying.Fluent.QueueAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.QueueAddressSubscriptionBuilder -JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.QueueAddressSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueAddressSubscriptionBuilder -JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithName(string queueName) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueuePublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.QueuePublicationBuilder -JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithDefaultQueue() -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.QueueSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.QueueSubscriptionBuilder -JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(JustSaying.IHandlerResolver handlerResolver) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithHandlerResolver(System.Func handlerResolver) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithLoggerFactory(System.Func loggerFactory) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithMessageContextAccessor(System.Func contextAccessor) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.ServicesBuilder.WithMessageMonitoring(System.Func monitoring) -> JustSaying.Fluent.ServicesBuilder -JustSaying.Fluent.SnsWriteConfigurationBuilder -JustSaying.Fluent.SnsWriteConfigurationBuilder.SnsWriteConfigurationBuilder() -> void -JustSaying.Fluent.SnsWriteConfigurationBuilder.WithErrorHandler(System.Func handler) -> JustSaying.Fluent.SnsWriteConfigurationBuilder -JustSaying.Fluent.SqsConfigurationBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(JustSaying.AwsTools.QueueCreation.ServerSideEncryption encryption) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithEncryption(string masterKeyId) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueue() -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithErrorQueueOptOut(bool value) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithMessageRetention(System.TimeSpan value) -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithNoErrorQueue() -> TBuilder -JustSaying.Fluent.SqsConfigurationBuilder.WithVisibilityTimeout(System.TimeSpan value) -> TBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder.SqsReadConfigurationBuilder() -> void -JustSaying.Fluent.SqsReadConfigurationBuilder.WithSubscriptionGroup(string subscriptionGroupName) -> JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsReadConfigurationBuilder.WithTopicSourceAccount(string id) -> JustSaying.Fluent.SqsReadConfigurationBuilder -JustSaying.Fluent.SqsWriteConfigurationBuilder -JustSaying.Fluent.SqsWriteConfigurationBuilder.SqsWriteConfigurationBuilder() -> void -JustSaying.Fluent.SqsWriteConfigurationBuilder.WithQueueName(string name) -> JustSaying.Fluent.SqsWriteConfigurationBuilder -JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueue() -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueue(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueArn(string queueArn, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueUri(System.Uri queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForQueueUrl(string queueUrl, string regionName = null, System.Action> configure = null) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic() -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic(string topicNameOverride, System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.ForTopic(System.Action> configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.WithDefaults(System.Action configure) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.SubscriptionsBuilder.WithSubscriptionGroup(string groupName, System.Action action) -> JustSaying.Fluent.SubscriptionsBuilder -JustSaying.Fluent.TopicAddressPublicationBuilder -JustSaying.Fluent.TopicAddressPublicationBuilder.Configure(JustSaying.JustSayingBus bus, JustSaying.AwsTools.IAwsClientFactoryProxy proxy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Fluent.TopicAddressPublicationBuilder.WithExceptionHandler(System.Func exceptionHandler) -> JustSaying.Fluent.TopicAddressPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.get -> System.Func -JustSaying.Fluent.TopicPublicationBuilder.TopicNameCustomizer.set -> void -JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithTopicName(System.Func topicNameCustomizer) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicPublicationBuilder.WithWriteConfiguration(System.Action configure) -> JustSaying.Fluent.TopicPublicationBuilder -JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.IntoDefaultTopic() -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithMiddlewareConfiguration(System.Action middlewareConfiguration) -> JustSaying.Fluent.ISubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithQueueName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithReadConfiguration(System.Action configure) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTag(string key, string value) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.Fluent.TopicSubscriptionBuilder.WithTopicName(string name) -> JustSaying.Fluent.TopicSubscriptionBuilder -JustSaying.HandlerNotRegisteredWithContainerException -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException() -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message) -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(string message, System.Exception inner) -> void -JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.HandlerResolutionContext -JustSaying.HandlerResolutionContext.HandlerResolutionContext(string queueName) -> void -JustSaying.HandlerResolutionContext.QueueName.get -> string -JustSaying.IHandlerResolver -JustSaying.IHandlerResolver.ResolveHandler(JustSaying.HandlerResolutionContext context) -> JustSaying.Messaging.MessageHandling.IHandlerAsync -JustSaying.IMessagingBus -JustSaying.IMessagingConfig -JustSaying.IMessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.IMessagingConfig.MessageSubjectProvider.set -> void -JustSaying.IMessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention -JustSaying.IMessagingConfig.QueueNamingConvention.set -> void -JustSaying.IMessagingConfig.Region.get -> string -JustSaying.IMessagingConfig.Region.set -> void -JustSaying.IMessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention -JustSaying.IMessagingConfig.TopicNamingConvention.set -> void -JustSaying.IMessagingConfig.Validate() -> void -JustSaying.IPublishConfiguration -JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.IPublishConfiguration.AdditionalSubscriberAccounts.set -> void -JustSaying.IPublishConfiguration.MessageResponseLogger.get -> System.Action -JustSaying.IPublishConfiguration.MessageResponseLogger.set -> void -JustSaying.IPublishConfiguration.PublishFailureBackoff.get -> System.TimeSpan -JustSaying.IPublishConfiguration.PublishFailureBackoff.set -> void -JustSaying.IPublishConfiguration.PublishFailureReAttempts.get -> int -JustSaying.IPublishConfiguration.PublishFailureReAttempts.set -> void -JustSaying.IStartable -JustSaying.IStartable.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus -JustSaying.JustSayingBus.AddMessageMiddleware(string queueName, JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> void -JustSaying.JustSayingBus.AddMessagePublisher(JustSaying.Messaging.IMessagePublisher messagePublisher) -> void -JustSaying.JustSayingBus.AddQueue(string subscriptionGroup, JustSaying.AwsTools.MessageHandling.ISqsQueue queue) -> void -JustSaying.JustSayingBus.Completion.get -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.Config.get -> JustSaying.IMessagingConfig -JustSaying.JustSayingBus.Dispose() -> void -JustSaying.JustSayingBus.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.JustSayingBus.JustSayingBus(JustSaying.IMessagingConfig config, JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister serializationRegister, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.JustSayingBus.SerializationRegister.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister -JustSaying.JustSayingBus.SetGroupSettings(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary settings) -> void -JustSaying.JustSayingBus.StartAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IMessageDeleter -JustSaying.Messaging.Channels.Context.IMessageDeleter.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater -JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.IQueueMessageContext -JustSaying.Messaging.Channels.Context.IQueueMessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueName.get -> string -JustSaying.Messaging.Channels.Context.IQueueMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Channels.Context.QueueMessageContext -JustSaying.Messaging.Channels.Context.QueueMessageContext.DeleteMessage(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Context.QueueMessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueName.get -> string -JustSaying.Messaging.Channels.Context.QueueMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Channels.Context.QueueMessageContext.UpdateMessageVisibilityTimeout(System.TimeSpan visibilityTimeout, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.IsPaused.get -> bool -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Pause() -> void -JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal.Resume() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.IsPaused.get -> bool -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.MessageReceivePauseSignal() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Pause() -> void -JustSaying.Messaging.Channels.Receive.MessageReceivePauseSignal.Resume() -> void -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.RunAsync(System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupCollection.SubscriptionGroupCollection(System.Collections.Generic.IList subscriptionGroups, Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueue(JustSaying.AwsTools.MessageHandling.ISqsQueue sqsQueue) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.AddQueues(System.Collections.Generic.IEnumerable sqsQueues) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.Build(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.SubscriptionGroupConfigBuilder(string groupName) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder.WithReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupConfigBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.Create(JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder defaults, System.Collections.Generic.IDictionary subscriptionGroupSettings) -> JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroup -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Channels.Receive.IMessageReceivePauseSignal messageReceivePauseSignal, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupFactory.SubscriptionGroupFactory(JustSaying.AwsTools.MessageHandling.Dispatch.IMessageDispatcher messageDispatcher, JustSaying.Messaging.Monitoring.IMessageMonitor monitor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Name.get -> string -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.Queues.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettings.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.BufferSize.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ConcurrencyLimit.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.MultiplexerCapacity.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.Prefetch.get -> int -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveBufferReadTimeout.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.ReceiveMessagesWaitTime.get -> System.TimeSpan -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SqsMiddleware.get -> JustSaying.Messaging.Middleware.MiddlewareBase> -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.SubscriptionGroupSettingsBuilder() -> void -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithCustomMiddleware(JustSaying.Messaging.Middleware.MiddlewareBase> middleware) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultBufferSize(int bufferSize) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultConcurrencyLimit(int concurrencyLimit) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultMultiplexerCapacity(int multiplexerCapacity) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultPrefetch(int prefetch) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveBufferReadTimeout(System.TimeSpan receiveBufferReadTimeout) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder.WithDefaultReceiveMessagesWaitTime(System.TimeSpan waitTime) -> JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsBuilder -JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation -JustSaying.Messaging.IMessagePublisher -JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.IMessagePublisher.PublishAsync(JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Interrogation.IInterrogable -JustSaying.Messaging.Interrogation.IInterrogable.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Interrogation.InterrogationResult -JustSaying.Messaging.Interrogation.InterrogationResult.Data.get -> object -JustSaying.Messaging.Interrogation.InterrogationResult.InterrogationResult(object data) -> void -JustSaying.Messaging.MessageAttributeValue -JustSaying.Messaging.MessageAttributeValue.BinaryValue.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.Messaging.MessageAttributeValue.BinaryValue.set -> void -JustSaying.Messaging.MessageAttributeValue.DataType.get -> string -JustSaying.Messaging.MessageAttributeValue.DataType.set -> void -JustSaying.Messaging.MessageAttributeValue.MessageAttributeValue() -> void -JustSaying.Messaging.MessageAttributeValue.StringValue.get -> string -JustSaying.Messaging.MessageAttributeValue.StringValue.set -> void -JustSaying.Messaging.MessageHandling.IHandlerAsync -JustSaying.Messaging.MessageHandling.IHandlerAsync.Handle(T message) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageContextAccessor -JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.IMessageContextAccessor.MessageContext.set -> void -JustSaying.Messaging.MessageHandling.IMessageContextReader -JustSaying.Messaging.MessageHandling.IMessageContextReader.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.IMessageLockAsync -JustSaying.Messaging.MessageHandling.IMessageLockAsync.ReleaseLockAsync(string key) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockAsync(string key, System.TimeSpan howLong) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.IMessageLockAsync.TryAcquireLockPermanentlyAsync(string key) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.ListHandler -JustSaying.Messaging.MessageHandling.ListHandler.Handle(T message) -> System.Threading.Tasks.Task -JustSaying.Messaging.MessageHandling.ListHandler.ListHandler(System.Collections.Generic.IEnumerable> handlers) -> void -JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageHandling.MessageAttributes.Get(string value) -> JustSaying.Messaging.MessageAttributeValue -JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes() -> void -JustSaying.Messaging.MessageHandling.MessageAttributes.MessageAttributes(System.Collections.Generic.Dictionary attributes) -> void -JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.MessageContext.Message.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.MessageHandling.MessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageHandling.MessageContext.MessageContext(Amazon.SQS.Model.Message message, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.MessageHandling.MessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.MessageHandling.MessageContextAccessor -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.get -> JustSaying.Messaging.MessageHandling.MessageContext -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContext.set -> void -JustSaying.Messaging.MessageHandling.MessageContextAccessor.MessageContextAccessor() -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse -JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.get -> bool -JustSaying.Messaging.MessageHandling.MessageLockResponse.DoIHaveExclusiveLock.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.get -> System.DateTimeOffset -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAt.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.get -> long -JustSaying.Messaging.MessageHandling.MessageLockResponse.ExpiryAtTicks.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.get -> bool -JustSaying.Messaging.MessageHandling.MessageLockResponse.IsMessagePermanentlyLocked.set -> void -JustSaying.Messaging.MessageHandling.MessageLockResponse.MessageLockResponse() -> void -JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy -JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy.GetBackoffDuration(JustSaying.Models.Message message, int approximateReceiveCount, System.Exception lastException = null) -> System.TimeSpan -JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults -JustSaying.Messaging.MessagePublisherExtensions -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GenericMessageSubjectProvider() -> void -JustSaying.Messaging.MessageSerialization.GenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory -JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.AddSerializer() -> void -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.IMessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.IMessageSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.IMessageSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.IMessageSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException() -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message) -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(string message, System.Exception innerException) -> void -JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.AddSerializer() -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.DeserializeMessage(string body) -> JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.MessageSerializationRegister(JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider messageSubjectProvider, JustSaying.Messaging.MessageSerialization.IMessageSerializationFactory serializationFactory) -> void -JustSaying.Messaging.MessageSerialization.MessageSerializationRegister.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing) -> string -JustSaying.Messaging.MessageSerialization.MessageWithAttributes -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.Message.get -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.MessageWithAttributes.MessageWithAttributes(JustSaying.Models.Message message, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory() -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializationFactory.NewtonsoftSerializationFactory(Newtonsoft.Json.JsonSerializerSettings settings) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer() -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.NewtonsoftSerializer(Newtonsoft.Json.JsonSerializerSettings settings) -> void -JustSaying.Messaging.MessageSerialization.NewtonsoftSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.GetSubjectForType(System.Type messageType) -> string -JustSaying.Messaging.MessageSerialization.NonGenericMessageSubjectProvider.NonGenericMessageSubjectProvider() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.GetSerializer() -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializationFactory.SystemTextJsonSerializationFactory(System.Text.Json.JsonSerializerOptions options) -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Deserialize(string message, System.Type type) -> JustSaying.Models.Message -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageAttributes(string message) -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.GetMessageSubject(string sqsMessage) -> string -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.Serialize(JustSaying.Models.Message message, bool serializeForSnsPublishing, string subject) -> string -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer() -> void -JustSaying.Messaging.MessageSerialization.SystemTextJsonSerializer.SystemTextJsonSerializer(System.Text.Json.JsonSerializerOptions options) -> void -JustSaying.Messaging.MessageSerialization.TypeSerializer -JustSaying.Messaging.MessageSerialization.TypeSerializer.Serializer.get -> JustSaying.Messaging.MessageSerialization.IMessageSerializer -JustSaying.Messaging.MessageSerialization.TypeSerializer.Type.get -> System.Type -JustSaying.Messaging.MessageSerialization.TypeSerializer.TypeSerializer(System.Type type, JustSaying.Messaging.MessageSerialization.IMessageSerializer serializer) -> void -JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware -JustSaying.Messaging.Middleware.Backoff.BackoffMiddleware.BackoffMiddleware(JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddleware.ErrorHandlerMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor) -> void -JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.ExactlyOnceMiddleware -JustSaying.Messaging.Middleware.ExactlyOnceMiddleware.ExactlyOnceMiddleware(JustSaying.Messaging.MessageHandling.IMessageLockAsync messageLock, System.TimeSpan timeout, string handlerName, Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Middleware.HandleMessageContext -JustSaying.Messaging.Middleware.HandleMessageContext.HandledException.get -> System.Exception -JustSaying.Messaging.Middleware.HandleMessageContext.HandleMessageContext(string queueName, Amazon.SQS.Model.Message rawMessage, JustSaying.Models.Message message, System.Type messageType, JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater visibilityUpdater, JustSaying.Messaging.Channels.Context.IMessageDeleter messageDeleter, System.Uri queueUri, JustSaying.Messaging.MessageHandling.MessageAttributes messageAttributes) -> void -JustSaying.Messaging.Middleware.HandleMessageContext.Message.get -> JustSaying.Models.Message -JustSaying.Messaging.Middleware.HandleMessageContext.MessageAttributes.get -> JustSaying.Messaging.MessageHandling.MessageAttributes -JustSaying.Messaging.Middleware.HandleMessageContext.MessageDeleter.get -> JustSaying.Messaging.Channels.Context.IMessageDeleter -JustSaying.Messaging.Middleware.HandleMessageContext.MessageType.get -> System.Type -JustSaying.Messaging.Middleware.HandleMessageContext.QueueName.get -> string -JustSaying.Messaging.Middleware.HandleMessageContext.QueueUri.get -> System.Uri -JustSaying.Messaging.Middleware.HandleMessageContext.RawMessage.get -> Amazon.SQS.Model.Message -JustSaying.Messaging.Middleware.HandleMessageContext.SetException(System.Exception e) -> void -JustSaying.Messaging.Middleware.HandleMessageContext.VisibilityUpdater.get -> JustSaying.Messaging.Channels.Context.IMessageVisibilityUpdater -JustSaying.Messaging.Middleware.HandleMessageContextExtensions -JustSaying.Messaging.Middleware.HandlerInvocationMiddleware -JustSaying.Messaging.Middleware.HandlerInvocationMiddleware.HandlerInvocationMiddleware(System.Func> handlerResolver) -> void -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Build() -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Configure(System.Action configure) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.HandlerMiddlewareBuilder(JustSaying.IHandlerResolver handlerResolver, JustSaying.Fluent.IServiceResolver serviceResolver) -> void -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(JustSaying.Messaging.Middleware.MiddlewareBase middleware) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use(System.Func> middlewareFactory) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.Use() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder.UseHandler() -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.Logging.LoggingMiddleware -JustSaying.Messaging.Middleware.Logging.LoggingMiddleware.LoggingMiddleware(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void -JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware -JustSaying.Messaging.Middleware.MessageContext.MessageContextAccessorMiddleware.MessageContextAccessorMiddleware(JustSaying.Messaging.MessageHandling.IMessageContextAccessor messageContextAccessor) -> void -JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions -JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.MiddlewareBase.MiddlewareBase() -> void -JustSaying.Messaging.Middleware.MiddlewareBase.RunAsync(TContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -JustSaying.Messaging.Middleware.MiddlewareBase.WithNext(JustSaying.Messaging.Middleware.MiddlewareBase next) -> JustSaying.Messaging.Middleware.MiddlewareBase -JustSaying.Messaging.Middleware.MiddlewareBuilder -JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware -JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.SqsPostProcessorMiddleware() -> void -JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware -JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.DefaultReceiveMessagesMiddleware(Microsoft.Extensions.Logging.ILogger logger) -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.get -> int -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.Count.set -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.get -> string -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.QueueName.set -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.ReceiveMessagesContext() -> void -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.get -> string -JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext.RegionName.set -> void -JustSaying.Messaging.Middleware.StopwatchMiddleware -JustSaying.Messaging.Middleware.StopwatchMiddleware.StopwatchMiddleware(JustSaying.Messaging.Monitoring.IMessageMonitor monitor, System.Type handlerType) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor -JustSaying.Messaging.Monitoring.IMessageMonitor.Handled(JustSaying.Models.Message message) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleException(System.Type messageType) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.HandleTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.IncrementThrottlingStatistic() -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.IssuePublishingMessage() -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.IMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.Handled(JustSaying.Models.Message message) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleError(System.Exception ex, Amazon.SQS.Model.Message message) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleException(System.Type messageType) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandlerExecutionTime(System.Type handlerType, System.Type messageType, System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleThrottlingTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.HandleTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IncrementThrottlingStatistic() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.IssuePublishingMessage() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.NullOpMessageMonitor() -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.PublishMessageTime(System.TimeSpan duration) -> void -JustSaying.Messaging.Monitoring.NullOpMessageMonitor.ReceiveMessageTime(System.TimeSpan duration, string queueName, string region) -> void -JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, double value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, JustSaying.Messaging.MessageAttributeValue value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, string value) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.AddMessageAttribute(string key, System.Collections.Generic.IReadOnlyCollection data) -> JustSaying.Messaging.PublishMetadata -JustSaying.Messaging.PublishMetadata.Delay.get -> System.TimeSpan? -JustSaying.Messaging.PublishMetadata.Delay.set -> void -JustSaying.Messaging.PublishMetadata.MessageAttributes.get -> System.Collections.Generic.IDictionary -JustSaying.Messaging.PublishMetadata.PublishMetadata() -> void -JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.BuildClientFactory() -> JustSaying.AwsTools.IAwsClientFactory -JustSaying.MessagingBusBuilder.BuildPublisher() -> JustSaying.Messaging.IMessagePublisher -JustSaying.MessagingBusBuilder.BuildSubscribers() -> JustSaying.IMessagingBus -JustSaying.MessagingBusBuilder.Client(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Messaging(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.MessagingBusBuilder() -> void -JustSaying.MessagingBusBuilder.Publications(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Services(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.Subscriptions(System.Action configure) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingBusBuilder.WithServiceResolver(JustSaying.Fluent.IServiceResolver serviceResolver) -> JustSaying.MessagingBusBuilder -JustSaying.MessagingConfig -JustSaying.MessagingConfig.AdditionalSubscriberAccounts.get -> System.Collections.Generic.IReadOnlyCollection -JustSaying.MessagingConfig.AdditionalSubscriberAccounts.set -> void -JustSaying.MessagingConfig.MessageResponseLogger.get -> System.Action -JustSaying.MessagingConfig.MessageResponseLogger.set -> void -JustSaying.MessagingConfig.MessageSubjectProvider.get -> JustSaying.Messaging.MessageSerialization.IMessageSubjectProvider -JustSaying.MessagingConfig.MessageSubjectProvider.set -> void -JustSaying.MessagingConfig.MessagingConfig() -> void -JustSaying.MessagingConfig.PublishFailureBackoff.get -> System.TimeSpan -JustSaying.MessagingConfig.PublishFailureBackoff.set -> void -JustSaying.MessagingConfig.PublishFailureReAttempts.get -> int -JustSaying.MessagingConfig.PublishFailureReAttempts.set -> void -JustSaying.MessagingConfig.QueueNamingConvention.get -> JustSaying.Naming.IQueueNamingConvention -JustSaying.MessagingConfig.QueueNamingConvention.set -> void -JustSaying.MessagingConfig.Region.get -> string -JustSaying.MessagingConfig.Region.set -> void -JustSaying.MessagingConfig.TopicNamingConvention.get -> JustSaying.Naming.ITopicNamingConvention -JustSaying.MessagingConfig.TopicNamingConvention.set -> void -JustSaying.Naming.DefaultNamingConventions -JustSaying.Naming.DefaultNamingConventions.DefaultNamingConventions() -> void -JustSaying.Naming.IQueueNamingConvention -JustSaying.Naming.IQueueNamingConvention.QueueName() -> string -JustSaying.Naming.ITopicNamingConvention -JustSaying.Naming.ITopicNamingConvention.TopicName() -> string -JustSaying.Naming.NamingConventionExtensions -override JustSaying.AwsTools.ErrorQueue.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -override JustSaying.AwsTools.ErrorQueue.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool -override JustSaying.AwsTools.ErrorQueue.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -override JustSaying.AwsTools.MessageHandling.SqsQueueByName.GetCreateQueueAttributes(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> System.Collections.Generic.Dictionary -override JustSaying.AwsTools.QueueCreation.RedrivePolicy.ToString() -> string -override JustSaying.AwsTools.QueueCreation.SqsReadConfiguration.OnValidating() -> void -override JustSaying.Messaging.MessageHandling.MessageLockResponse.ToString() -> string -override JustSaying.Messaging.Middleware.PostProcessing.SqsPostProcessorMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.HandleMessageContext context, System.Func> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -override JustSaying.Messaging.Middleware.Receive.DefaultReceiveMessagesMiddleware.RunInnerAsync(JustSaying.Messaging.Middleware.Receive.ReceiveMessagesContext context, System.Func>> func, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task> -static JustSaying.AwsTools.JustSayingConstants.DefaultAttributeEncryptionKeyReusePeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultHandlerRetryCount.get -> int -static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryCount.get -> int -static JustSaying.AwsTools.JustSayingConstants.DefaultPublisherRetryInterval.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.DefaultSnsAttributeEncryptionKeyId.get -> string -static JustSaying.AwsTools.JustSayingConstants.DefaultSqsAttributeEncryptionKeyId.get -> string -static JustSaying.AwsTools.JustSayingConstants.DefaultVisibilityTimeout.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MaximumDeliveryDelay.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MaximumRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MinimumDeliveryDelay.get -> System.TimeSpan -static JustSaying.AwsTools.JustSayingConstants.MinimumRetentionPeriod.get -> System.TimeSpan -static JustSaying.AwsTools.QueueCreation.RedrivePolicy.ConvertFromString(string policy) -> JustSaying.AwsTools.QueueCreation.RedrivePolicy -static JustSaying.Extensions.ChannelExtensions.MergeAsync(System.Collections.Generic.IEnumerable> inputs, System.Threading.Channels.ChannelWriter output, System.Threading.CancellationToken stoppingToken) -> System.Threading.Tasks.Task -static JustSaying.Messaging.Channels.SubscriptionGroups.SubscriptionGroupSettingsValidation.Validate(this JustSaying.Messaging.Channels.SubscriptionGroups.ISubscriptionGroupSettings settings) -> void -static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.MaxAmazonMessageCap.get -> int -static JustSaying.Messaging.MessageProcessingStrategies.MessageDefaults.ParallelHandlerExecutionPerCore.get -> int -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message) -> System.Threading.Tasks.Task -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, JustSaying.Messaging.PublishMetadata metadata) -> System.Threading.Tasks.Task -static JustSaying.Messaging.MessagePublisherExtensions.PublishAsync(this JustSaying.Messaging.IMessagePublisher publisher, JustSaying.Models.Message message, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -static JustSaying.Messaging.Middleware.Backoff.BackoffMiddlewareBuilderExtensions.UseBackoff(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, JustSaying.Messaging.MessageProcessingStrategies.IMessageBackoffStrategy backoffStrategy) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.ErrorHandling.ErrorHandlerMiddlewareBuilderExtensions.UseErrorHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.ExactlyOnceHandlerMiddlewareBuilderExtensions.UseExactlyOnce(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, string lockKey, System.TimeSpan? lockDuration = null) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.HandleMessageContextExtensions.MessageAs(this JustSaying.Messaging.Middleware.HandleMessageContext context) -> TMessage -static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseDefaults(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.HandlerMiddlewareBuilderExtensions.UseHandler(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Func> handler) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MessageContext.MessageContextMiddlewareBuilderExtensions.UseMessageContextAccessor(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MetricsMiddlewareBuilderExtensions.UseStopwatch(this JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder builder, System.Type handlerType) -> JustSaying.Messaging.Middleware.HandlerMiddlewareBuilder -static JustSaying.Messaging.Middleware.MiddlewareBuilder.BuildAsync(params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase -static JustSaying.Messaging.Middleware.MiddlewareBuilder.WithAsync(this JustSaying.Messaging.Middleware.MiddlewareBase inner, params JustSaying.Messaging.Middleware.MiddlewareBase[] middleware) -> JustSaying.Messaging.Middleware.MiddlewareBase -static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.IQueueNamingConvention namingConvention, string overrideQueueName) -> string -static JustSaying.Naming.NamingConventionExtensions.Apply(this JustSaying.Naming.ITopicNamingConvention namingConvention, string overrideTopicName) -> string -virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceConfig config) -> void -virtual JustSaying.AwsTools.DefaultAwsClientFactory.Configure(Amazon.SQS.AmazonSQSConfig config) -> void -virtual JustSaying.AwsTools.MessageHandling.SnsMessagePublisher.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.CreateAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, int attempt = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.DeleteAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.ExistsAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.Interrogate() -> JustSaying.Messaging.Interrogation.InterrogationResult -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.QueueNeedsUpdating(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig) -> bool -virtual JustSaying.AwsTools.MessageHandling.SqsQueueByNameBase.UpdateQueueAttributeAsync(JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration queueConfig, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task -virtual JustSaying.AwsTools.QueueCreation.SqsBasicConfiguration.OnValidating() -> void -virtual JustSaying.MessagingConfig.Validate() -> void -virtual JustSaying.Naming.DefaultNamingConventions.QueueName() -> string -virtual JustSaying.Naming.DefaultNamingConventions.TopicName() -> string diff --git a/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt b/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt index e69de29bb..ec6ede7fa 100644 --- a/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/JustSaying/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt @@ -0,0 +1,4 @@ +JustSaying.AwsTools.MessageHandling.PublishException.PublishException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +JustSaying.AwsTools.QueueCreation.ConfigurationErrorsException.ConfigurationErrorsException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +JustSaying.HandlerNotRegisteredWithContainerException.HandlerNotRegisteredWithContainerException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +JustSaying.Messaging.MessageSerialization.MessageFormatNotSupportedException.MessageFormatNotSupportedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void diff --git a/tests/JustSaying.IntegrationTests/Fluent/ActionRunnerTest.cs b/tests/JustSaying.IntegrationTests/Fluent/ActionRunnerTest.cs deleted file mode 100644 index 71456f9e1..000000000 --- a/tests/JustSaying.IntegrationTests/Fluent/ActionRunnerTest.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace JustSaying.IntegrationTests.Fluent; - -public class ActionRunnerTest(ITestOutputHelper outputHelper) : IntegrationTestBase(outputHelper) -{ - protected override TimeSpan Timeout => TimeSpan.FromSeconds(2); - - [Fact] - public async Task TestRunnerWillSucceedOnSuccessfulTask() - { - static async Task SuccessTask(CancellationToken ctx) => - await Task.Delay(100, ctx); - - await RunActionWithTimeout(SuccessTask); - } - - [Fact] - public async Task TestRunnerWillThrowOnTimeout() - { - async Task TimeoutTask(CancellationToken ctx) => - await Task.Delay(Timeout.Add(Timeout), ctx); - - await Assert.ThrowsAsync( - () => RunActionWithTimeout(TimeoutTask)); - } - - [Fact] - public async Task TestRunnerWillThrowOnFailure() - { - static async Task ThrowingTask(CancellationToken ctx) - { - await Task.Delay(100, ctx); - throw new InvalidOperationException(); - } - - await Assert.ThrowsAsync( - () => RunActionWithTimeout(ThrowingTask)); - } -} diff --git a/tests/JustSaying.IntegrationTests/Fluent/AwsTools/WhenUsingABasicThrottle.cs b/tests/JustSaying.IntegrationTests/Fluent/AwsTools/WhenUsingABasicThrottle.cs index bec28a9b3..ce951afb0 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/AwsTools/WhenUsingABasicThrottle.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/AwsTools/WhenUsingABasicThrottle.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using System.Text.Json; using Amazon.SQS.Model; using JustSaying.AwsTools; using JustSaying.AwsTools.MessageHandling; @@ -40,7 +41,7 @@ public async Task Messages_Are_Throttled_But_Still_Delivered(int throttleMessage { await queue.CreateAsync(new SqsBasicConfiguration()); - if (!IsSimulator) + if (ServiceUri is not null) { // Wait for up to 60 secs for queue creation to be guaranteed completed by AWS using var cts = new CancellationTokenSource(TimeSpan.FromMinutes(1)); @@ -72,7 +73,7 @@ public async Task Messages_Are_Throttled_But_Still_Delivered(int throttleMessage { var batchEntry = new SendMessageBatchRequestEntry { - MessageBody = $$"""{"Subject":"SimpleMessage", "Message": { "Content": "{{entriesAdded}}"} }""", + MessageBody = $$"""{"Subject":"SimpleMessage", "Message": "{{JsonEncodedText.Encode($$"""{ "Content": "{{entriesAdded}}" }""")}}" }""", Id = Guid.NewGuid().ToString() }; @@ -105,7 +106,7 @@ await WhenAsync( async (publisher, listener, cancellationToken) => { var stopwatch = Stopwatch.StartNew(); - var delay = IsSimulator ? TimeSpan.FromMilliseconds(100) : TimeSpan.FromSeconds(5); + var delay = (ServiceUri is null) ? TimeSpan.FromMilliseconds(100) : TimeSpan.FromSeconds(5); await listener.StartAsync(cancellationToken); diff --git a/tests/JustSaying.IntegrationTests/Fluent/IntegrationTestBase.cs b/tests/JustSaying.IntegrationTests/Fluent/IntegrationTestBase.cs index 6fdd0f6fa..d109688fe 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/IntegrationTestBase.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/IntegrationTestBase.cs @@ -5,6 +5,7 @@ using JustSaying.Messaging.MessageHandling; using JustSaying.Models; using JustSaying.TestingFramework; +using LocalSqsSnsMessaging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NSubstitute; @@ -31,7 +32,9 @@ public abstract class IntegrationTestBase(ITestOutputHelper outputHelper) protected virtual bool IsSimulator => TestEnvironment.IsSimulatorConfigured; - protected virtual TimeSpan Timeout => TimeSpan.FromSeconds(Debugger.IsAttached ? 60 : 20); + protected virtual InMemoryAwsBus Bus { get; } = new InMemoryAwsBus(); + + protected virtual TimeSpan Timeout => TimeSpan.FromSeconds(Debugger.IsAttached ? 300 : 10); protected virtual string UniqueName { get; } = $"{Guid.NewGuid():N}-integration-tests"; @@ -62,8 +65,9 @@ protected IServiceCollection Given( builder.Messaging((options) => options.WithRegion(RegionName)) .Client((options) => { - options.WithSessionCredentials(AccessKeyId, SecretAccessKey, SessionToken) - .WithServiceUri(ServiceUri); + options.WithClientFactory(() => new LocalAwsClientFactory(Bus)); + // options.WithSessionCredentials(AccessKeyId, SecretAccessKey, SessionToken) + // .WithServiceUri(ServiceUri); }); builder.Subscriptions(sub => sub.WithDefaults(x => x.WithDefaultConcurrencyLimit(10))); @@ -73,8 +77,9 @@ protected IServiceCollection Given( protected virtual IAwsClientFactory CreateClientFactory() { - var credentials = new SessionAWSCredentials(AccessKeyId, SecretAccessKey, SessionToken); - return new DefaultAwsClientFactory(credentials) { ServiceUri = ServiceUri }; + return new LocalAwsClientFactory(Bus); + // var credentials = new SessionAWSCredentials(AccessKeyId, SecretAccessKey, SessionToken); + // return new DefaultAwsClientFactory(credentials) { ServiceUri = ServiceUri }; } protected IHandlerAsync CreateHandler(TaskCompletionSource completionSource) diff --git a/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTestExtensions.cs b/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTestExtensions.cs index 9363a4b85..3d047f641 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTestExtensions.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTestExtensions.cs @@ -30,4 +30,32 @@ public static MessagingBusBuilder WithLoopbackTopic(this MessagingBusBuilder configure?.Invoke(subscriptionBuilder); })); } -} \ No newline at end of file + + public static MessagingBusBuilder WithLoopbackQueueAndPublicationOptions(this MessagingBusBuilder builder, string name, + Action> configure = null) + where T : Message + { + return builder + .Publications((options) => options.WithQueue(o => + { + configure?.Invoke(o); + o.WithName(name); + })) + .Subscriptions((options) => options.ForQueue(subscriptionBuilder => + { + subscriptionBuilder.WithQueueName(name); + })); + } + + public static MessagingBusBuilder WithLoopbackTopicAndPublicationOptions(this MessagingBusBuilder builder, string name, + Action> configure) + where T : Message + { + return builder + .Publications((options) => options.WithTopic(configure)) + .Subscriptions((options) => options.ForTopic(subscriptionBuilder => + { + subscriptionBuilder.WithQueueName(name); + })); + } +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTests.cs b/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTests.cs index f75649baa..44ab80d19 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTests.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/MessagingBusBuilderTests.cs @@ -1,8 +1,10 @@ using JustSaying.Fluent; +using JustSaying.IntegrationTests.Fluent; using JustSaying.Messaging; using JustSaying.Messaging.Monitoring; using JustSaying.Models; using JustSaying.TestingFramework; +using LocalSqsSnsMessaging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -22,14 +24,17 @@ public async Task Can_Create_Messaging_Bus_Fluently_For_A_Queue() var queueName = Guid.NewGuid().ToString(); // Arrange + var bus = new InMemoryAwsBus(); var services = new ServiceCollection() .AddLogging((p) => p.AddXUnit(OutputHelper)) .AddJustSaying( (builder) => { builder.Client((options) => - options.WithBasicCredentials("accessKey", "secretKey") - .WithServiceUri(TestEnvironment.SimulatorUrl)) + options.WithClientFactory(() => new LocalAwsClientFactory(bus)) + // options.WithBasicCredentials("accessKey", "secretKey") + // .WithServiceUri(TestEnvironment.SimulatorUrl) + ) .Messaging((options) => options.WithRegion("eu-west-1")) .Publications((options) => options.WithQueue(o => o.WithName(queueName))) .Subscriptions((options) => options.ForQueue(o => o.WithQueueName(queueName))) @@ -66,6 +71,7 @@ public async Task Can_Create_Messaging_Bus_Fluently_For_A_Topic() var topicName = Guid.NewGuid().ToString(); // Arrange + var bus = new InMemoryAwsBus(); var services = new ServiceCollection() .AddLogging((p) => p.AddXUnit(OutputHelper)) .AddJustSaying( @@ -73,8 +79,10 @@ public async Task Can_Create_Messaging_Bus_Fluently_For_A_Topic() { builder .Client((options) => - options.WithBasicCredentials("accessKey", "secretKey") - .WithServiceUri(TestEnvironment.SimulatorUrl)) + options.WithClientFactory(() => new LocalAwsClientFactory(bus)) + // options.WithBasicCredentials("accessKey", "secretKey") + // .WithServiceUri(TestEnvironment.SimulatorUrl) + ) .Messaging((options) => options.WithRegion("eu-west-1")) .Publications((options) => options.WithTopic()) .Subscriptions((options) => options.ForTopic(cfg => cfg.WithQueueName(topicName))); @@ -169,9 +177,13 @@ private sealed class AwsContributor : IMessageBusConfigurationContributor { public void Configure(MessagingBusBuilder builder) { + var bus = new InMemoryAwsBus(); builder.Client( - (options) => options.WithSessionCredentials("accessKeyId", "secretKeyId", "token") - .WithServiceUri(TestEnvironment.SimulatorUrl)); + (options) => + options.WithClientFactory(() => new LocalAwsClientFactory(bus)) + // options.WithSessionCredentials("accessKeyId", "secretKeyId", "token") + // .WithServiceUri(TestEnvironment.SimulatorUrl) + ); } } diff --git a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithAttributes.cs b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithAttributes.cs new file mode 100644 index 000000000..df3e28e67 --- /dev/null +++ b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithAttributes.cs @@ -0,0 +1,65 @@ +using JustSaying.AwsTools.QueueCreation; +using JustSaying.Fluent.Subscribing.Newtonsoft; +using JustSaying.Messaging; +using JustSaying.Messaging.MessageHandling; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.TestingFramework; +using Microsoft.Extensions.DependencyInjection; + +namespace JustSaying.IntegrationTests.Fluent.Publishing; + +public class WhenAMessageIsPublishedToAQueueWithAttribute(ITestOutputHelper outputHelper) : IntegrationTestBase(outputHelper) +{ + public class SimpleMessageWithStringAttributesHandler(IMessageContextAccessor contextAccessor) : IHandlerAsync + { + private readonly IMessageContextAccessor _contextAccessor = contextAccessor; + + public Task Handle(SimpleMessage message) + { + HandledMessages.Add((_contextAccessor.MessageContext, message)); + return Task.FromResult(true); + } + + public List<(MessageContext context, SimpleMessage message)> HandledMessages { get; } = new List<(MessageContext, SimpleMessage)>(); + } + + [AwsFact] + public async Task Then_The_Message_Is_Handled() + { + // Arrange + var handler = new SimpleMessageWithStringAttributesHandler(new MessageContextAccessor()); + + var services = GivenJustSaying() + .ConfigureJustSaying((builder) => builder.WithLoopbackQueueAndPublicationOptions(UniqueName)) + .AddSingleton>(handler); + + var message = new SimpleMessage + { + // Content longer than 100 bytes + Content = Guid.NewGuid().ToString() + }; + var publishMetadata = new PublishMetadata(); + publishMetadata.AddMessageAttribute("Hello", "World"); + + await WhenAsync( + services, + async (publisher, listener, cancellationToken) => + { + await listener.StartAsync(cancellationToken); + await publisher.StartAsync(cancellationToken); + + // Act + await publisher.PublishAsync(message, publishMetadata, cancellationToken); + + // Assert + await Patiently.AssertThatAsync(OutputHelper, + () => + { + var (actualMessageContext, actualMessage) = handler.HandledMessages.ShouldHaveSingleItem(); + actualMessage.Content.ShouldBe(message.Content); + actualMessageContext.MessageAttributes.GetKeys().ShouldContain("Hello"); + }); + }); + } + +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithCompression.cs b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithCompression.cs new file mode 100644 index 000000000..676e31cd9 --- /dev/null +++ b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithCompression.cs @@ -0,0 +1,61 @@ +using JustSaying.AwsTools.MessageHandling; +using JustSaying.AwsTools.QueueCreation; +using JustSaying.Messaging; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageHandling; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.TestingFramework; +using Microsoft.Extensions.DependencyInjection; + +namespace JustSaying.IntegrationTests.Fluent.Publishing; + +public class WhenAMessageIsPublishedToAQueueWithCompression(ITestOutputHelper outputHelper) : IntegrationTestBase(outputHelper) +{ + [AwsFact] + public async Task Then_The_Message_Is_Handled() + { + // Arrange + var handler = new InspectableHandler(); + + var services = GivenJustSaying() + .ConfigureJustSaying((builder) => builder.WithLoopbackQueueAndPublicationOptions(UniqueName, + c => + { + c.WithWriteConfiguration(writeConfiguration => + { + writeConfiguration.CompressionOptions = new PublishCompressionOptions + { + CompressionEncoding = ContentEncodings.GzipBase64, + MessageLengthThreshold = 100 + }; + }); + })) + .AddSingleton>(handler); + + var message = new SimpleMessage + { + // Content longer than 100 bytes + Content = new string('a', 500) + }; + + await WhenAsync( + services, + async (publisher, listener, cancellationToken) => + { + await listener.StartAsync(cancellationToken); + await publisher.StartAsync(cancellationToken); + var publishMetadata = new PublishMetadata(); + publishMetadata.AddMessageAttribute("Hello", "World"); + + // Act + await publisher.PublishAsync(message, publishMetadata, cancellationToken); + + // Assert + await Patiently.AssertThatAsync(OutputHelper, + () => + { + handler.ReceivedMessages.ShouldHaveSingleItem().Content.ShouldBe(message.Content); + }); + }); + } +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithSystemTextJson.cs b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithSystemTextJson.cs index 8c00e3d34..66fe06bad 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithSystemTextJson.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToAQueueWithSystemTextJson.cs @@ -17,7 +17,6 @@ public async Task Then_The_Message_Is_Handled() var services = GivenJustSaying() .ConfigureJustSaying( (builder) => builder.WithLoopbackQueue(UniqueName)) - .AddSingleton() .AddSingleton(handler); string content = Guid.NewGuid().ToString(); @@ -43,4 +42,4 @@ await WhenAsync( await handler.Received().Handle(Arg.Is((m) => m.Content == content)); }); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATenantedTopic.cs b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATenantedTopic.cs index a2fb59f3b..cd17a1c2b 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATenantedTopic.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATenantedTopic.cs @@ -42,6 +42,8 @@ await WhenAsync( services, async (publisher, listener, cancellationToken) => { + var waitForSixMessages = handler.WaitForMessageCountAsync(6, cancellationToken); + await listener.StartAsync(cancellationToken); await publisher.StartAsync(cancellationToken); @@ -57,11 +59,14 @@ await WhenAsync( json = publisherJson.Replace(UniqueName, "integrationTestQueueName", StringComparison.Ordinal); + await waitForSixMessages; + // Assert await Patiently.AssertThatAsync(OutputHelper, () => { var received = handler.ReceivedMessages; + received.Count.ShouldBe(6); received.ShouldContain(x => x.Content == testId && x.Tenant == "uk", 2); received.ShouldContain(x => x.Content == testId && x.Tenant == "it", 2); received.ShouldContain(x => x.Content == testId && x.Tenant == "es", 2); diff --git a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATopicWithAttributes.cs b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATopicWithAttributes.cs new file mode 100644 index 000000000..bdd64fdd7 --- /dev/null +++ b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATopicWithAttributes.cs @@ -0,0 +1,49 @@ +using JustSaying.Messaging; +using JustSaying.Messaging.MessageHandling; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.TestingFramework; +using Microsoft.Extensions.DependencyInjection; + +namespace JustSaying.IntegrationTests.Fluent.Publishing; + +public class WhenAMessageIsPublishedToATopicWithAttributes(ITestOutputHelper outputHelper) : IntegrationTestBase(outputHelper) +{ + [AwsFact] + public async Task Then_The_Message_Is_Handled() + { + // Arrange + var handler = new InspectableHandler(); + + var services = GivenJustSaying() + .ConfigureJustSaying( + (builder) => builder.WithLoopbackTopic(UniqueName)) + .AddSingleton>(handler); + + string content = Guid.NewGuid().ToString(); + + var message = new SimpleMessage() + { + Content = content + }; + var publishMetadata = new PublishMetadata(); + publishMetadata.AddMessageAttribute("Hello", "World"); + + await WhenAsync( + services, + async (publisher, listener, cancellationToken) => + { + await listener.StartAsync(cancellationToken); + await publisher.StartAsync(cancellationToken); + + // Act + await publisher.PublishAsync(message, publishMetadata, cancellationToken); + + // Assert + await Patiently.AssertThatAsync(OutputHelper, + () => + { + handler.ReceivedMessages.ShouldHaveSingleItem().Content.ShouldBe(content); + }); + }); + } +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATopicWithSystemTextJson.cs b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATopicWithSystemTextJson.cs index 6e4e2aeb0..ed96527fc 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATopicWithSystemTextJson.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedToATopicWithSystemTextJson.cs @@ -16,7 +16,6 @@ public async Task Then_The_Message_Is_Handled() var services = GivenJustSaying() .ConfigureJustSaying( (builder) => builder.WithLoopbackTopic(UniqueName)) - .AddSingleton() .AddSingleton>(handler); string content = Guid.NewGuid().ToString(); @@ -44,4 +43,4 @@ await Patiently.AssertThatAsync(OutputHelper, }); }); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedWithCompression.cs b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedWithCompression.cs new file mode 100644 index 000000000..ac1169d8d --- /dev/null +++ b/tests/JustSaying.IntegrationTests/Fluent/Publishing/WhenAMessageIsPublishedWithCompression.cs @@ -0,0 +1,57 @@ +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageHandling; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.TestingFramework; +using Microsoft.Extensions.DependencyInjection; + +namespace JustSaying.IntegrationTests.Fluent.Publishing; + +public class WhenAMessageIsPublishedWithCompression(ITestOutputHelper outputHelper) : IntegrationTestBase(outputHelper) +{ + [AwsFact] + public async Task Then_The_Message_Is_Handled() + { + // Arrange + var handler = new InspectableHandler(); + + var services = GivenJustSaying() + .ConfigureJustSaying((builder) => builder.WithLoopbackTopicAndPublicationOptions(UniqueName, + c => + { + c.WithWriteConfiguration(writeConfiguration => + { + writeConfiguration.CompressionOptions = new PublishCompressionOptions + { + CompressionEncoding = ContentEncodings.GzipBase64, + MessageLengthThreshold = 100 + }; + }); + })) + .AddSingleton>(handler); + + var message = new SimpleMessage + { + // Content longer than 100 bytes + Content = new string('a', 500) + }; + + await WhenAsync( + services, + async (publisher, listener, cancellationToken) => + { + await listener.StartAsync(cancellationToken); + await publisher.StartAsync(cancellationToken); + + // Act + await publisher.PublishAsync(message, cancellationToken); + + // Assert + await Patiently.AssertThatAsync(OutputHelper, + () => + { + handler.ReceivedMessages.ShouldHaveSingleItem().Content.ShouldBe(message.Content); + }); + }); + } +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/RawDelivery/InspectableSqsClient.cs b/tests/JustSaying.IntegrationTests/Fluent/RawDelivery/InspectableSqsClient.cs new file mode 100644 index 000000000..e679d14a1 --- /dev/null +++ b/tests/JustSaying.IntegrationTests/Fluent/RawDelivery/InspectableSqsClient.cs @@ -0,0 +1,85 @@ +using Amazon; +using Amazon.Runtime; +using Amazon.Runtime.Endpoints; +using Amazon.Runtime.SharedInterfaces; +using Amazon.SimpleNotificationService; +using Amazon.SQS; +using Amazon.SQS.Model; +using JustSaying.AwsTools; +using JustSaying.TestingFramework; + +namespace JustSaying.Fluent.RawDelivery; + +internal sealed class InspectableSqsClient(IAmazonSQS innerAmazonSqsClient) : IAmazonSQS +{ + public List ReceiveMessageResponses { get; } = []; + + async Task IAmazonSQS.ReceiveMessageAsync(ReceiveMessageRequest request, CancellationToken cancellationToken) + { + var response = await innerAmazonSqsClient.ReceiveMessageAsync(request, cancellationToken); + ReceiveMessageResponses.Add(response); + return response; + } + + // Proxied implementations + void IDisposable.Dispose() => innerAmazonSqsClient.Dispose(); + Task> ICoreAmazonSQS.GetAttributesAsync(string queueUrl) => innerAmazonSqsClient.GetAttributesAsync(queueUrl); + Task ICoreAmazonSQS.SetAttributesAsync(string queueUrl, Dictionary attributes) => innerAmazonSqsClient.SetAttributesAsync(queueUrl, attributes); + IClientConfig IAmazonService.Config => innerAmazonSqsClient.Config; + Task IAmazonSQS.AuthorizeS3ToSendMessageAsync(string queueUrl, string bucket) => innerAmazonSqsClient.AuthorizeS3ToSendMessageAsync(queueUrl, bucket); + Task IAmazonSQS.AddPermissionAsync(string queueUrl, string label, List awsAccountIds, List actions, CancellationToken cancellationToken) => innerAmazonSqsClient.AddPermissionAsync(queueUrl, label, awsAccountIds, actions, cancellationToken); + Task IAmazonSQS.AddPermissionAsync(AddPermissionRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.AddPermissionAsync(request, cancellationToken); + Task IAmazonSQS.CancelMessageMoveTaskAsync(CancelMessageMoveTaskRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.CancelMessageMoveTaskAsync(request, cancellationToken); + Task IAmazonSQS.ChangeMessageVisibilityAsync(string queueUrl, string receiptHandle, int visibilityTimeout, CancellationToken cancellationToken) => innerAmazonSqsClient.ChangeMessageVisibilityAsync(queueUrl, receiptHandle, visibilityTimeout, cancellationToken); + Task IAmazonSQS.ChangeMessageVisibilityAsync(ChangeMessageVisibilityRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.ChangeMessageVisibilityAsync(request, cancellationToken); + Task IAmazonSQS.ChangeMessageVisibilityBatchAsync(string queueUrl, List entries, CancellationToken cancellationToken) => innerAmazonSqsClient.ChangeMessageVisibilityBatchAsync(queueUrl, entries, cancellationToken); + Task IAmazonSQS.ChangeMessageVisibilityBatchAsync(ChangeMessageVisibilityBatchRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.ChangeMessageVisibilityBatchAsync(request, cancellationToken); + Task IAmazonSQS.CreateQueueAsync(string queueName, CancellationToken cancellationToken) => innerAmazonSqsClient.CreateQueueAsync(queueName, cancellationToken); + Task IAmazonSQS.CreateQueueAsync(CreateQueueRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.CreateQueueAsync(request, cancellationToken); + Task IAmazonSQS.DeleteMessageAsync(string queueUrl, string receiptHandle, CancellationToken cancellationToken) => innerAmazonSqsClient.DeleteMessageAsync(queueUrl, receiptHandle, cancellationToken); + Task IAmazonSQS.DeleteMessageAsync(DeleteMessageRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.DeleteMessageAsync(request, cancellationToken); + Task IAmazonSQS.DeleteMessageBatchAsync(string queueUrl, List entries, CancellationToken cancellationToken) => innerAmazonSqsClient.DeleteMessageBatchAsync(queueUrl, entries, cancellationToken); + Task IAmazonSQS.DeleteMessageBatchAsync(DeleteMessageBatchRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.DeleteMessageBatchAsync(request, cancellationToken); + Task IAmazonSQS.DeleteQueueAsync(string queueUrl, CancellationToken cancellationToken) => innerAmazonSqsClient.DeleteQueueAsync(queueUrl, cancellationToken); + Task IAmazonSQS.DeleteQueueAsync(DeleteQueueRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.DeleteQueueAsync(request, cancellationToken); + Task IAmazonSQS.GetQueueAttributesAsync(string queueUrl, List attributeNames, CancellationToken cancellationToken) => innerAmazonSqsClient.GetQueueAttributesAsync(queueUrl, attributeNames, cancellationToken); + Task IAmazonSQS.GetQueueAttributesAsync(GetQueueAttributesRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.GetQueueAttributesAsync(request, cancellationToken); + Task IAmazonSQS.GetQueueUrlAsync(string queueName, CancellationToken cancellationToken) => innerAmazonSqsClient.GetQueueUrlAsync(queueName, cancellationToken); + Task IAmazonSQS.GetQueueUrlAsync(GetQueueUrlRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.GetQueueUrlAsync(request, cancellationToken); + Task IAmazonSQS.ListDeadLetterSourceQueuesAsync(ListDeadLetterSourceQueuesRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.ListDeadLetterSourceQueuesAsync(request, cancellationToken); + Task IAmazonSQS.ListMessageMoveTasksAsync(ListMessageMoveTasksRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.ListMessageMoveTasksAsync(request, cancellationToken); + Task IAmazonSQS.ListQueuesAsync(string queueNamePrefix, CancellationToken cancellationToken) => innerAmazonSqsClient.ListQueuesAsync(queueNamePrefix, cancellationToken); + Task IAmazonSQS.ListQueuesAsync(ListQueuesRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.ListQueuesAsync(request, cancellationToken); + Task IAmazonSQS.ListQueueTagsAsync(ListQueueTagsRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.ListQueueTagsAsync(request, cancellationToken); + Task IAmazonSQS.PurgeQueueAsync(string queueUrl, CancellationToken cancellationToken) => innerAmazonSqsClient.PurgeQueueAsync(queueUrl, cancellationToken); + Task IAmazonSQS.PurgeQueueAsync(PurgeQueueRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.PurgeQueueAsync(request, cancellationToken); + Task IAmazonSQS.ReceiveMessageAsync(string queueUrl, CancellationToken cancellationToken) => innerAmazonSqsClient.ReceiveMessageAsync(queueUrl, cancellationToken); + Task IAmazonSQS.RemovePermissionAsync(string queueUrl, string label, CancellationToken cancellationToken) => innerAmazonSqsClient.RemovePermissionAsync(queueUrl, label, cancellationToken); + Task IAmazonSQS.RemovePermissionAsync(RemovePermissionRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.RemovePermissionAsync(request, cancellationToken); + Task IAmazonSQS.SendMessageAsync(string queueUrl, string messageBody, CancellationToken cancellationToken) => innerAmazonSqsClient.SendMessageAsync(queueUrl, messageBody, cancellationToken); + Task IAmazonSQS.SendMessageAsync(SendMessageRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.SendMessageAsync(request, cancellationToken); + Task IAmazonSQS.SendMessageBatchAsync(string queueUrl, List entries, CancellationToken cancellationToken) => innerAmazonSqsClient.SendMessageBatchAsync(queueUrl, entries, cancellationToken); + Task IAmazonSQS.SendMessageBatchAsync(SendMessageBatchRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.SendMessageBatchAsync(request, cancellationToken); + Task IAmazonSQS.SetQueueAttributesAsync(string queueUrl, Dictionary attributes, CancellationToken cancellationToken) => innerAmazonSqsClient.SetQueueAttributesAsync(queueUrl, attributes, cancellationToken); + Task IAmazonSQS.SetQueueAttributesAsync(SetQueueAttributesRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.SetQueueAttributesAsync(request, cancellationToken); + Task IAmazonSQS.StartMessageMoveTaskAsync(StartMessageMoveTaskRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.StartMessageMoveTaskAsync(request, cancellationToken); + Task IAmazonSQS.TagQueueAsync(TagQueueRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.TagQueueAsync(request, cancellationToken); + Task IAmazonSQS.UntagQueueAsync(UntagQueueRequest request, CancellationToken cancellationToken) => innerAmazonSqsClient.UntagQueueAsync(request, cancellationToken); + Endpoint IAmazonSQS.DetermineServiceOperationEndpoint(AmazonWebServiceRequest request) => innerAmazonSqsClient.DetermineServiceOperationEndpoint(request); + ISQSPaginatorFactory IAmazonSQS.Paginators => innerAmazonSqsClient.Paginators; +} + +internal sealed class InspectableClientFactory(IAwsClientFactory innerClientFactory) : IAwsClientFactory +{ + public InspectableSqsClient InspectableSqsClient { get; } = new(innerClientFactory.GetSqsClient(TestEnvironment.Region)); + + public IAmazonSimpleNotificationService GetSnsClient(RegionEndpoint region) + { + return innerClientFactory.GetSnsClient(region); + } + + public IAmazonSQS GetSqsClient(RegionEndpoint region) + { + return InspectableSqsClient; + } +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/RawDelivery/WhenUsingRawDelivery.cs b/tests/JustSaying.IntegrationTests/Fluent/RawDelivery/WhenUsingRawDelivery.cs new file mode 100644 index 000000000..aebb52b63 --- /dev/null +++ b/tests/JustSaying.IntegrationTests/Fluent/RawDelivery/WhenUsingRawDelivery.cs @@ -0,0 +1,57 @@ +using JustSaying.IntegrationTests; +using JustSaying.IntegrationTests.Fluent; +using JustSaying.Messaging.MessageHandling; +using JustSaying.TestingFramework; +using Microsoft.Extensions.DependencyInjection; + +namespace JustSaying.Fluent.RawDelivery; + +public class WhenUsingRawDelivery(ITestOutputHelper outputHelper) : IntegrationTestBase(outputHelper) +{ + [AwsFact] + public async Task Then_The_Message_Is_Published() + { + // Arrange + var handler = new InspectableHandler(); + var awsClientFactory = new InspectableClientFactory(new LocalAwsClientFactory(Bus)); + + var services = GivenJustSaying() + .ConfigureJustSaying((builder) => + { + builder.Client((options) => options.WithClientFactory(() => awsClientFactory)); + builder.WithLoopbackTopic(UniqueName, + c => { c.WithReadConfiguration(rc => rc.RawMessageDelivery = true); }); + }) + .AddSingleton>(handler); + + string content = Guid.NewGuid().ToString(); + + var message = new SimpleMessage + { + Content = content + }; + + await WhenAsync( + services, + async (publisher, listener, cancellationToken) => + { + await listener.StartAsync(cancellationToken); + await publisher.StartAsync(cancellationToken); + + // Act + await publisher.PublishAsync(message, cancellationToken); + + // Assert + await Patiently.AssertThatAsync(() => + { + var handledMessage = handler.ReceivedMessages.Where(m => m.Id.ToString() == message.UniqueKey()).ShouldHaveSingleItem(); + handledMessage.Content.ShouldBe(content); + var response = awsClientFactory.InspectableSqsClient.ReceiveMessageResponses.Where(r => r.Messages.Count > 0).ShouldHaveSingleItem(); + var responseMessage = response.Messages.ShouldHaveSingleItem(); + var messageBody = responseMessage.Body; + messageBody.ShouldNotContain("Message"); + messageBody.ShouldNotContain("Subject"); + }); + }); + } +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithBinaryAttributes.cs b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithBinaryAttributes.cs index 79f41b583..a555fc3f4 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithBinaryAttributes.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithBinaryAttributes.cs @@ -34,7 +34,6 @@ public async Task Then_The_Attributes_Are_Returned() var services = GivenJustSaying() .ConfigureJustSaying((builder) => builder .WithLoopbackTopic(UniqueName)) - .AddSingleton() .AddSingleton>(handler); await WhenAsync( diff --git a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithStringAttributes.cs b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithStringAttributes.cs index d03cc8762..6db1a520f 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithStringAttributes.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/SystemTextJson/WhenHandlingAMessageWithStringAttributes.cs @@ -33,7 +33,6 @@ public async Task Then_The_Attributes_Are_Returned() var services = GivenJustSaying() .ConfigureJustSaying((builder) => builder .WithLoopbackTopic(UniqueName)) - .AddSingleton() .AddSingleton>(handler); await WhenAsync( diff --git a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenApplyingDefaultMiddlewares.cs b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenApplyingDefaultMiddlewares.cs index b12c0efea..075d50b8a 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenApplyingDefaultMiddlewares.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenApplyingDefaultMiddlewares.cs @@ -25,7 +25,7 @@ public async Task Then_The_Defaults_Are_The_Defaults_For_Sure() var services = GivenJustSaying() .ConfigureJustSaying((builder) => builder.WithLoopbackTopic(UniqueName)) - .AddJustSayingHandlers(new[] { handler }); + .AddJustSayingHandlers([handler]); string json = ""; await WhenAsync( @@ -81,4 +81,4 @@ await WhenAsync( json.ShouldMatchApproved(c => c.SubFolder($"Approvals")); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenReceivingIsThrottled.cs b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenReceivingIsThrottled.cs index 2f49d461e..e1bdb47b5 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenReceivingIsThrottled.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenReceivingIsThrottled.cs @@ -16,8 +16,8 @@ public sealed class WhenReceivingIsThrottled(ITestOutputHelper outputHelper) : I [AwsFact] public async Task Then_The_Messages_Are_Handled_With_Throttle() { - // First handler takes ages all the others take 50 ms - int waitOthers = 50; + // First handler takes ages all the others take 10 ms + int waitOthers = 10; int waitOne = 3_600_000; var messagesToSend = Enumerable.Range(0, 30) @@ -41,19 +41,21 @@ public async Task Then_The_Messages_Are_Handled_With_Throttle() c.WithSubscriptionGroup("group"))))) .AddSingleton>(handler); - var baseSleep = TimeSpan.FromMilliseconds(500); + var baseSleep = TimeSpan.FromMilliseconds(50); await WhenAsync( services, async (publisher, listener, cancellationToken) => { + var waitForElevenMessages = handler.WaitForMessageCountAsync(11, cancellationToken); + await listener.StartAsync(cancellationToken); await publisher.StartAsync(cancellationToken); - // Publish the message with a long running handler + // Publish the message with a long-running handler await publisher.PublishAsync(messagesToSend.First(), cancellationToken); - // Give some time to AWS to schedule the first long running message + // Give some time to AWS to schedule the first long-running message await Task.Delay(baseSleep, cancellationToken); foreach (var msg in messagesToSend.Skip(1).SkipLast(1)) @@ -65,8 +67,8 @@ await WhenAsync( await Task.Delay(baseSleep, cancellationToken); await publisher.PublishAsync(messagesToSend.Last(), cancellationToken); - // Wait for a reasonble time before asserting whether the last message has been scheduled. - await Task.Delay(baseSleep * 2, cancellationToken); + // Wait for more than 10 messages. + await waitForElevenMessages; handler.ReceivedMessages.Count.ShouldBeGreaterThan(10); handler.ReceivedMessages.ShouldBeInOrder(SortDirection.Ascending); diff --git a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenUsingResourceAddresses.cs b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenUsingResourceAddresses.cs index 71000d989..71c634fae 100644 --- a/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenUsingResourceAddresses.cs +++ b/tests/JustSaying.IntegrationTests/Fluent/Subscribing/WhenUsingResourceAddresses.cs @@ -166,8 +166,9 @@ public async Task CanPublishUsingTopicArnWithoutStartingBusAndWithNoRegion() { builder.Client((options) => { - options.WithSessionCredentials(AccessKeyId, SecretAccessKey, SessionToken) - .WithServiceUri(ServiceUri); + options.WithClientFactory(() => clientFactory); + // options.WithSessionCredentials(AccessKeyId, SecretAccessKey, SessionToken) + // .WithServiceUri(ServiceUri); }); }) .ConfigureJustSaying(builder => @@ -192,4 +193,4 @@ await WhenAsync( await publisher.PublishAsync(message, cancellationToken); }); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.IntegrationTests/JustSaying.IntegrationTests.csproj b/tests/JustSaying.IntegrationTests/JustSaying.IntegrationTests.csproj index fb965627b..cc47188fa 100644 --- a/tests/JustSaying.IntegrationTests/JustSaying.IntegrationTests.csproj +++ b/tests/JustSaying.IntegrationTests/JustSaying.IntegrationTests.csproj @@ -12,14 +12,14 @@ - - + + - + diff --git a/tests/JustSaying.IntegrationTests/JustSaying.IntegrationTests.sln b/tests/JustSaying.IntegrationTests/JustSaying.IntegrationTests.sln new file mode 100644 index 000000000..5181f1dca --- /dev/null +++ b/tests/JustSaying.IntegrationTests/JustSaying.IntegrationTests.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JustSaying.IntegrationTests", "JustSaying.IntegrationTests.csproj", "{7B078B88-5CAE-423B-B6BB-18392F7C54BD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7B078B88-5CAE-423B-B6BB-18392F7C54BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B078B88-5CAE-423B-B6BB-18392F7C54BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B078B88-5CAE-423B-B6BB-18392F7C54BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B078B88-5CAE-423B-B6BB-18392F7C54BD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E3F85F97-D917-4B57-9EC0-DB84F3917969} + EndGlobalSection +EndGlobal diff --git a/tests/JustSaying.IntegrationTests/TestSettings.cs b/tests/JustSaying.IntegrationTests/TestSettings.cs deleted file mode 100644 index e5cc5d402..000000000 --- a/tests/JustSaying.IntegrationTests/TestSettings.cs +++ /dev/null @@ -1 +0,0 @@ -[assembly: CollectionBehavior(DisableTestParallelization = true)] diff --git a/tests/JustSaying.IntegrationTests/docker-compose.yml b/tests/JustSaying.IntegrationTests/docker-compose.yml index de650be7f..b833b24a4 100644 --- a/tests/JustSaying.IntegrationTests/docker-compose.yml +++ b/tests/JustSaying.IntegrationTests/docker-compose.yml @@ -1,10 +1,9 @@ -version: "2" services: localstack: container_name: localstack restart: unless-stopped - image: localstack/localstack:3.5.0 + image: localstack/localstack:3.7 ports: - - 4566:4566 + - "4566:4566" environment: LS_LOG: debug diff --git a/tests/JustSaying.IntegrationTests/xunit.runner.json b/tests/JustSaying.IntegrationTests/xunit.runner.json index b1988f269..96581b86d 100644 --- a/tests/JustSaying.IntegrationTests/xunit.runner.json +++ b/tests/JustSaying.IntegrationTests/xunit.runner.json @@ -1,6 +1,4 @@ { "methodDisplay": "classAndMethod", - "methodDisplayOptions": "replaceUnderscoreWithSpace", - "parallelizeTestCollections": false, - "maxParallelThreads": 1 + "methodDisplayOptions": "replaceUnderscoreWithSpace" } diff --git a/tests/JustSaying.TestingFramework/AwsFactAttribute.cs b/tests/JustSaying.TestingFramework/AwsFactAttribute.cs index 6d3646f0a..09ce62a25 100644 --- a/tests/JustSaying.TestingFramework/AwsFactAttribute.cs +++ b/tests/JustSaying.TestingFramework/AwsFactAttribute.cs @@ -6,11 +6,6 @@ namespace JustSaying.TestingFramework; public sealed class AwsFactAttribute : FactAttribute { public AwsFactAttribute() - : base() { - if (!TestEnvironment.IsSimulatorConfigured && !TestEnvironment.HasCredentials) - { - Skip = "This test requires either an AWS simulator URL or AWS credentials to be configured."; - } } -} \ No newline at end of file +} diff --git a/tests/JustSaying.TestingFramework/AwsTheoryAttribute.cs b/tests/JustSaying.TestingFramework/AwsTheoryAttribute.cs index b6ca18d36..e35512a17 100644 --- a/tests/JustSaying.TestingFramework/AwsTheoryAttribute.cs +++ b/tests/JustSaying.TestingFramework/AwsTheoryAttribute.cs @@ -8,9 +8,5 @@ public sealed class AwsTheoryAttribute : TheoryAttribute public AwsTheoryAttribute() : base() { - if (!TestEnvironment.IsSimulatorConfigured && !TestEnvironment.HasCredentials) - { - Skip = "This test requires either an AWS simulator URL or AWS credentials to be configured."; - } } -} \ No newline at end of file +} diff --git a/tests/JustSaying.TestingFramework/InspectableHandler.cs b/tests/JustSaying.TestingFramework/InspectableHandler.cs index 76e16884a..0bafa1cbf 100644 --- a/tests/JustSaying.TestingFramework/InspectableHandler.cs +++ b/tests/JustSaying.TestingFramework/InspectableHandler.cs @@ -1,3 +1,4 @@ +using System.Collections.Concurrent; using JustSaying.Messaging.MessageHandling; namespace JustSaying.TestingFramework; @@ -6,21 +7,21 @@ public class InspectableHandler : IHandlerAsync { public InspectableHandler() { - ReceivedMessages = new List(); + ReceivedMessages = []; ShouldSucceed = true; } public Action OnHandle { get; set; } - public IList ReceivedMessages { get; } + public ConcurrentQueue ReceivedMessages { get; } public bool ShouldSucceed { get; set; } public virtual Task Handle(T message) { - ReceivedMessages.Add(message); + ReceivedMessages.Enqueue(message); OnHandle?.Invoke(message); return Task.FromResult(ShouldSucceed); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.TestingFramework/InspectableHandlerExtensions.cs b/tests/JustSaying.TestingFramework/InspectableHandlerExtensions.cs new file mode 100644 index 000000000..89931cc6f --- /dev/null +++ b/tests/JustSaying.TestingFramework/InspectableHandlerExtensions.cs @@ -0,0 +1,32 @@ +namespace JustSaying.TestingFramework; + +public static class InspectableHandlerExtensions +{ + public static async Task WaitForMessageCountAsync(this InspectableHandler handler, int count, CancellationToken cancellationToken = default) + { + var tcs = new TaskCompletionSource(); + var messageCount = 0; + + handler.OnHandle += Handler; + + await tcs.Task; + + handler.OnHandle -= Handler; + return; + + void Handler(T _) + { + if (cancellationToken.IsCancellationRequested) + { + tcs.SetCanceled(cancellationToken); + return; + } + + Interlocked.Increment(ref messageCount); + if (messageCount >= count) + { + tcs.SetResult(true); + } + } + } +} diff --git a/tests/JustSaying.TestingFramework/JustSaying.TestingFramework.csproj b/tests/JustSaying.TestingFramework/JustSaying.TestingFramework.csproj index 2eb504355..f24d52a10 100644 --- a/tests/JustSaying.TestingFramework/JustSaying.TestingFramework.csproj +++ b/tests/JustSaying.TestingFramework/JustSaying.TestingFramework.csproj @@ -8,6 +8,7 @@ + diff --git a/tests/JustSaying.TestingFramework/LocalAwsClientFactory.cs b/tests/JustSaying.TestingFramework/LocalAwsClientFactory.cs index a400a192b..b0b085d64 100644 --- a/tests/JustSaying.TestingFramework/LocalAwsClientFactory.cs +++ b/tests/JustSaying.TestingFramework/LocalAwsClientFactory.cs @@ -1,36 +1,26 @@ using Amazon; -using Amazon.Runtime; using Amazon.SimpleNotificationService; using Amazon.SQS; using JustSaying.AwsTools; +using LocalSqsSnsMessaging; namespace JustSaying.TestingFramework; -public class LocalAwsClientFactory(Uri serviceUrl) : IAwsClientFactory +public sealed class LocalAwsClientFactory : IAwsClientFactory { - private Uri ServiceUrl { get; } = serviceUrl; + private readonly InMemoryAwsBus _bus; + public LocalAwsClientFactory(InMemoryAwsBus bus) + { + _bus = bus; + } public IAmazonSimpleNotificationService GetSnsClient(RegionEndpoint region) { - var credentials = new AnonymousAWSCredentials(); - var clientConfig = new AmazonSimpleNotificationServiceConfig - { - RegionEndpoint = region, - ServiceURL = ServiceUrl.ToString() - }; - - return new AmazonSimpleNotificationServiceClient(credentials, clientConfig); + return _bus.CreateSnsClient(); } public IAmazonSQS GetSqsClient(RegionEndpoint region) { - var credentials = new AnonymousAWSCredentials(); - var clientConfig = new AmazonSQSConfig - { - RegionEndpoint = region, - ServiceURL = ServiceUrl.ToString() - }; - - return new AmazonSQSClient(credentials, clientConfig); + return _bus.CreateSqsClient(); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.TestingFramework/TaskHelpers.cs b/tests/JustSaying.TestingFramework/TaskHelpers.cs index e7a8b6e30..a2d779a9b 100644 --- a/tests/JustSaying.TestingFramework/TaskHelpers.cs +++ b/tests/JustSaying.TestingFramework/TaskHelpers.cs @@ -2,24 +2,11 @@ namespace JustSaying.TestingFramework; public static class TaskHelpers { - public static async Task WaitWithTimeoutAsync(Task task) - => await WaitWithTimeoutAsync(task, TimeSpan.FromMilliseconds(10000)) - .ConfigureAwait(false); - - public static async Task WaitWithTimeoutAsync(Task task, TimeSpan timeoutDuration) - { - var timeoutTask = Task.Delay(timeoutDuration); - var firstToComplete = await Task.WhenAny(task, timeoutTask).ConfigureAwait(false); - - if (firstToComplete != timeoutTask) return true; - return false; - } - public static void DelaySendDone(TaskCompletionSource doneSignal) { Task.Run(async () => { - await Task.Delay(200).ConfigureAwait(false); + await Task.Delay(10).ConfigureAwait(false); doneSignal.SetResult(null); }); } diff --git a/tests/JustSaying.TestingFramework/TestEnvironment.cs b/tests/JustSaying.TestingFramework/TestEnvironment.cs index 0aac57823..e6b47333e 100644 --- a/tests/JustSaying.TestingFramework/TestEnvironment.cs +++ b/tests/JustSaying.TestingFramework/TestEnvironment.cs @@ -111,4 +111,4 @@ public static RegionEndpoint SecondaryRegion private static string RegionName => Environment.GetEnvironmentVariable("AWS_REGION"); private static string SecondaryRegionName => Environment.GetEnvironmentVariable("AWS_REGION_SECONDARY"); -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageCompressionUtilityTests.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageCompressionUtilityTests.cs new file mode 100644 index 000000000..ab289b243 --- /dev/null +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageCompressionUtilityTests.cs @@ -0,0 +1,104 @@ +using JustSaying.Messaging; +using JustSaying.Messaging.Compression; +using JustSaying.AwsTools.MessageHandling; + +namespace JustSaying.UnitTests.AwsTools.MessageHandling; + +public class MessageCompressionUtilityTests +{ + private readonly MessageCompressionRegistry _compressionRegistry; + + public MessageCompressionUtilityTests() + { + _compressionRegistry = new MessageCompressionRegistry([new GzipMessageBodyCompression()]); + } + + [Fact] + public void CompressMessageIfNeeded_NoCompression_ReturnsOriginalMessage() + { + // Arrange + var message = "Test message"; + var metadata = new PublishMetadata(); + var compressionOptions = new PublishCompressionOptions(); + + // Act + var result = PublishMessageConverter.CompressMessageBody(message, metadata, PublishDestinationType.Topic, compressionOptions, _compressionRegistry); + + // Assert + Assert.Null(result.compressedMessage); + Assert.Null(result.contentEncoding); + } + + [Fact] + public void CompressMessageIfNeeded_CompressionThresholdNotMet_ReturnsOriginalMessage() + { + // Arrange + var message = "Short message"; + var metadata = new PublishMetadata(); + var compressionOptions = new PublishCompressionOptions + { + CompressionEncoding = ContentEncodings.GzipBase64, + MessageLengthThreshold = 1000 + }; + + // Act + var result = PublishMessageConverter.CompressMessageBody(message, metadata, PublishDestinationType.Topic, compressionOptions, _compressionRegistry); + + // Assert + Assert.Null(result.compressedMessage); + Assert.Null(result.contentEncoding); + } + + [Fact] + public void CompressMessageIfNeeded_CompressionThresholdMet_ReturnsCompressedMessage() + { + // Arrange + var message = new string('a', 1000); + var metadata = new PublishMetadata(); + var compressionOptions = new PublishCompressionOptions + { + CompressionEncoding = ContentEncodings.GzipBase64, + MessageLengthThreshold = 500 + }; + + // Act + var result = PublishMessageConverter.CompressMessageBody(message, metadata, PublishDestinationType.Topic, compressionOptions, _compressionRegistry); + + // Assert + Assert.NotNull(result.compressedMessage); + Assert.Equal(ContentEncodings.GzipBase64, result.contentEncoding); + + // Verify that the compressed message can be decompressed + var gzipCompression = new GzipMessageBodyCompression(); + var decompressedMessage = gzipCompression.Decompress(result.compressedMessage); + Assert.Equal(message, decompressedMessage); + } + + [Fact] + public void CompressMessageIfNeeded_WithMessageAttributes_CalculatesTotalSize() + { + // Arrange + var message = "Test message"; + var metadata = new PublishMetadata(); + metadata.AddMessageAttribute("Key1", new MessageAttributeValue { StringValue = "Value1", DataType = "String" }); + metadata.AddMessageAttribute("Key2", new MessageAttributeValue { BinaryValue = new byte[100], DataType = "Binary" }); + + var compressionOptions = new PublishCompressionOptions + { + CompressionEncoding = ContentEncodings.GzipBase64, + MessageLengthThreshold = 50 + }; + + // Act + var result = PublishMessageConverter.CompressMessageBody(message, metadata, PublishDestinationType.Topic, compressionOptions, _compressionRegistry); + + // Assert + Assert.NotNull(result.compressedMessage); + Assert.Equal(ContentEncodings.GzipBase64, result.contentEncoding); + + // Verify that the compressed message can be decompressed + var gzipCompression = new GzipMessageBodyCompression(); + var decompressedMessage = gzipCompression.Decompress(result.compressedMessage); + Assert.Equal(message, decompressedMessage); + } +} diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageDispatcherTests/WhenDispatchingCompressedMessage.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageDispatcherTests/WhenDispatchingCompressedMessage.cs new file mode 100644 index 000000000..01e3994be --- /dev/null +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageDispatcherTests/WhenDispatchingCompressedMessage.cs @@ -0,0 +1,72 @@ +using System.IO.Compression; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using Amazon.SQS.Model; +using JustSaying.AwsTools.MessageHandling; +using JustSaying.AwsTools.MessageHandling.Dispatch; +using JustSaying.Messaging; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.Messaging.Monitoring; +using JustSaying.TestingFramework; +using JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; +using Microsoft.Extensions.Logging; +using MessageAttributeValue = Amazon.SQS.Model.MessageAttributeValue; + +namespace JustSaying.UnitTests.AwsTools.MessageHandling.MessageDispatcherTests; + +public class WhenDispatchingCompressedMessage +{ + [Fact] + public async Task ShouldDecompressMessage() + { + // Arrange + var originalMessage = new SimpleMessage { Id = Guid.NewGuid() }; + var decompressorRegistry = + new MessageCompressionRegistry([new GzipMessageBodyCompression()]); + var messageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), decompressorRegistry, false); + + string payload = JsonSerializer.Serialize(originalMessage, originalMessage.GetType(), new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + Converters = + { + new JsonStringEnumConverter(), + }, + }); + + var memoryStream = new MemoryStream(); + await using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress)) + { + gzipStream.Write(Encoding.UTF8.GetBytes(payload)); + } + + var compressedPayload = Convert.ToBase64String(memoryStream.ToArray()); + var fullMessagePayload = JsonSerializer.Serialize(new { Subject = nameof(SimpleMessage), Message = compressedPayload }); + + var sqsMessage = new Message + { + Body = fullMessagePayload, + MessageAttributes = + { + ["Content-Encoding"] = new MessageAttributeValue { DataType = "String", StringValue = ContentEncodings.GzipBase64 } + } + }; + + var queue = new FakeSqsQueue(ct => Task.FromResult(Enumerable.Empty())); + var queueReader = new SqsQueueReader(queue, messageConverter); + var messageContext = queueReader.ToMessageContext(sqsMessage); + var middlewareMap = new MiddlewareMap(); + var inspectableMiddleware = new InspectableMiddleware(); + middlewareMap.Add("fake-queue-name", inspectableMiddleware); + var messageDispatcher = new MessageDispatcher(new NullOpMessageMonitor(), middlewareMap, new LoggerFactory()); + + // Act + await messageDispatcher.DispatchMessageAsync(messageContext, CancellationToken.None); + + // Assert + var handledDecompressedMessage = inspectableMiddleware.Handler.ReceivedMessages.ShouldHaveSingleItem(); + handledDecompressedMessage.Id.ShouldBe(originalMessage.Id); + } +} diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageDispatcherTests/WhenDispatchingMessage.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageDispatcherTests/WhenDispatchingMessage.cs index b478a4b66..b8f06eaa9 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageDispatcherTests/WhenDispatchingMessage.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/MessageDispatcherTests/WhenDispatchingMessage.cs @@ -2,6 +2,8 @@ using Amazon.SQS; using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.MessageHandling.Dispatch; +using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageHandling; using JustSaying.Messaging.MessageProcessingStrategies; using JustSaying.Messaging.MessageSerialization; @@ -24,7 +26,6 @@ public class WhenDispatchingMessage : IAsyncLifetime { private const string ExpectedQueueUrl = "http://testurl.com/queue"; - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); private readonly TrackingLoggingMonitor _messageMonitor; private readonly MiddlewareMap _middlewareMap; private readonly ILoggerFactory _loggerFactory; @@ -36,7 +37,9 @@ public class WhenDispatchingMessage : IAsyncLifetime internal MessageDispatcher SystemUnderTest { get; private set; } - protected readonly IMessageBackoffStrategy MessageBackoffStrategy = Substitute.For(); + private readonly IMessageBackoffStrategy _messageBackoffStrategy = Substitute.For(); + private readonly IMessageBodySerializer _messageBodySerializer = Substitute.For(); + private readonly ReceivedMessageConverter _messageConverter; public WhenDispatchingMessage(ITestOutputHelper outputHelper) { @@ -44,6 +47,7 @@ public WhenDispatchingMessage(ITestOutputHelper outputHelper) _loggerFactory = TestLoggerFactory.Create(lb => lb.AddXUnit(outputHelper)); _messageMonitor = new TrackingLoggingMonitor(_loggerFactory.CreateLogger()); _middlewareMap = new MiddlewareMap(); + _messageConverter = new ReceivedMessageConverter(_messageBodySerializer, new MessageCompressionRegistry(), false); } public virtual async Task InitializeAsync() @@ -62,7 +66,7 @@ public virtual Task DisposeAsync() protected virtual void Given() { - _typedMessage = new OrderAccepted(); + _typedMessage = new SimpleMessage(); _sqsMessage = new SQSMessage { @@ -79,20 +83,19 @@ IEnumerable GetMessages() { Uri = new Uri(ExpectedQueueUrl) }; - _serializationRegister.DeserializeMessage(Arg.Any()) - .Returns(new MessageWithAttributes(_typedMessage, new MessageAttributes())); + + _messageBodySerializer.Deserialize(Arg.Any()).Returns(_typedMessage); } private async Task When() { - var queueReader = new SqsQueueReader(_queue); + var queueReader = new SqsQueueReader(_queue, _messageConverter); await SystemUnderTest.DispatchMessageAsync(queueReader.ToMessageContext(_sqsMessage), CancellationToken.None); } private MessageDispatcher CreateSystemUnderTestAsync() { var dispatcher = new MessageDispatcher( - _serializationRegister, _messageMonitor, _middlewareMap, _loggerFactory); @@ -100,6 +103,12 @@ private MessageDispatcher CreateSystemUnderTestAsync() return dispatcher; } + [Fact] + public void ShouldDeserializeMessage() + { + _messageBodySerializer.Received(1).Deserialize(Arg.Is(x => x == _sqsMessage.Body)); + } + public class AndHandlerMapDoesNotHaveMatchingHandler(ITestOutputHelper outputHelper) : WhenDispatchingMessage(outputHelper) { private const int ExpectedReceiveCount = 1; @@ -111,12 +120,6 @@ protected override void Given() _sqsMessage.Attributes.Add(MessageSystemAttributeName.ApproximateReceiveCount, ExpectedReceiveCount.ToString(CultureInfo.InvariantCulture)); } - [Fact] - public void ShouldDeserializeMessage() - { - _serializationRegister.Received(1).DeserializeMessage(Arg.Is(x => x == _sqsMessage.Body)); - } - [Fact] public void ShouldNotHandleMessage() { @@ -138,17 +141,11 @@ protected override void Given() sc => sc.AddSingleton>(handler)); var middleware = new HandlerMiddlewareBuilder(testResolver, testResolver) - .UseBackoff(MessageBackoffStrategy) + .UseBackoff(_messageBackoffStrategy) .UseDefaults(handler.GetType()) .Build(); - _middlewareMap.Add(_queue.QueueName, middleware); - } - - [Fact] - public void ShouldDeserializeMessage() - { - _serializationRegister.Received(1).DeserializeMessage(Arg.Is(x => x == _sqsMessage.Body)); + _middlewareMap.Add(_queue.QueueName, middleware); } [Fact] @@ -180,20 +177,20 @@ protected override void Given() sc => sc.AddSingleton>(handler)); var middleware = new HandlerMiddlewareBuilder(testResolver, testResolver) - .UseBackoff(MessageBackoffStrategy) + .UseBackoff(_messageBackoffStrategy) .UseDefaults(handler.GetType()) .Build(); - _middlewareMap.Add(_queue.QueueName, middleware); + _middlewareMap.Add(_queue.QueueName, middleware); - MessageBackoffStrategy.GetBackoffDuration(_typedMessage, 1, _expectedException).Returns(_expectedBackoffTimeSpan); + _messageBackoffStrategy.GetBackoffDuration(_typedMessage, 1, _expectedException).Returns(_expectedBackoffTimeSpan); _sqsMessage.Attributes.Add(MessageSystemAttributeName.ApproximateReceiveCount, ExpectedReceiveCount.ToString(CultureInfo.InvariantCulture)); } [Fact] public void ShouldInvokeMessageBackoffStrategyWithNumberOfReceives() { - MessageBackoffStrategy.Received(1).GetBackoffDuration(Arg.Is(_typedMessage), Arg.Is(ExpectedReceiveCount), Arg.Is(_expectedException)); + _messageBackoffStrategy.Received(1).GetBackoffDuration(Arg.Is(_typedMessage), Arg.Is(ExpectedReceiveCount), Arg.Is(_expectedException)); } [Fact] diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishing.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishing.cs index df73de4f3..4475d8e72 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishing.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishing.cs @@ -1,9 +1,10 @@ using Amazon.SimpleNotificationService.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; -using JustSaying.Models; using JustSaying.TestingFramework; +using JustSaying.UnitTests.Messaging.Channels.TestHelpers; using Microsoft.Extensions.Logging.Abstractions; using NSubstitute; @@ -12,18 +13,17 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sns.TopicByName; public class WhenPublishing : WhenPublishingTestBase { private const string Message = "the_message_in_json"; - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); private const string TopicArn = "topicarn"; private protected override Task CreateSystemUnderTestAsync() { - var topic = new SnsMessagePublisher(TopicArn, Sns, _serializationRegister, NullLoggerFactory.Instance, new NonGenericMessageSubjectProvider()); + var messageConverter = new PublishMessageConverter(PublishDestinationType.Topic, new FakeBodySerializer(Message), new MessageCompressionRegistry(), new PublishCompressionOptions(), nameof(SimpleMessage), false); + var topic = new SnsMessagePublisher(TopicArn, Sns, messageConverter, NullLoggerFactory.Instance); return Task.FromResult(topic); } protected override void Given() { - _serializationRegister.Serialize(Arg.Any(), Arg.Is(true)).Returns(Message); Sns.FindTopicAsync("TopicName") .Returns(new Topic { TopicArn = TopicArn }); } diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsync.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsync.cs index 6c2d3fbd7..ca4139252 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsync.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsync.cs @@ -1,9 +1,11 @@ using Amazon.SimpleNotificationService.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.Models; using JustSaying.TestingFramework; +using JustSaying.UnitTests.Messaging.Channels.TestHelpers; using Microsoft.Extensions.Logging.Abstractions; using NSubstitute; @@ -15,19 +17,17 @@ public class WhenPublishingAsync : WhenPublishingTestBase private const string MessageAttributeKey = "StringAttribute"; private const string MessageAttributeValue = "StringValue"; private const string MessageAttributeDataType = "String"; - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); private const string TopicArn = "topicarn"; private protected override Task CreateSystemUnderTestAsync() { - var topic = new SnsMessagePublisher(TopicArn, Sns, _serializationRegister, NullLoggerFactory.Instance, new NonGenericMessageSubjectProvider()); + var messageConverter = new PublishMessageConverter(PublishDestinationType.Topic, new FakeBodySerializer(Message), new MessageCompressionRegistry(), new PublishCompressionOptions(), nameof(SimpleMessage), false); + var topic = new SnsMessagePublisher(TopicArn, Sns, messageConverter, NullLoggerFactory.Instance); return Task.FromResult(topic); } protected override void Given() { - _serializationRegister.Serialize(Arg.Any(), Arg.Is(true)).Returns(Message); - Sns.FindTopicAsync("TopicName") .Returns(new Topic { TopicArn = TopicArn }); } diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeHandled.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeHandled.cs index 364bf605b..4baa8a735 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeHandled.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeHandled.cs @@ -1,6 +1,7 @@ using Amazon.SimpleNotificationService.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using Microsoft.Extensions.Logging.Abstractions; @@ -11,12 +12,12 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sns.TopicByName; public class WhenPublishingAsyncExceptionCanBeHandled : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); private const string TopicArn = "topicarn"; private protected override Task CreateSystemUnderTestAsync() { - var topic = new SnsMessagePublisher(TopicArn, Sns, _serializationRegister, NullLoggerFactory.Instance, Substitute.For(), (_, _) => true); + var messageConverter = new PublishMessageConverter(PublishDestinationType.Topic, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); + var topic = new SnsMessagePublisher(TopicArn, Sns, messageConverter, NullLoggerFactory.Instance, (_, _) => true); return Task.FromResult(topic); } diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeThrown.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeThrown.cs index e557dbfc9..63867e3ce 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeThrown.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncExceptionCanBeThrown.cs @@ -2,6 +2,7 @@ using Amazon.SimpleNotificationService.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using Microsoft.Extensions.Logging.Abstractions; @@ -12,12 +13,12 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sns.TopicByName; public class WhenPublishingAsyncExceptionCanBeThrown : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); private const string TopicArn = "topicarn"; private protected override Task CreateSystemUnderTestAsync() { - var topic = new SnsMessagePublisher(TopicArn, Sns, _serializationRegister, NullLoggerFactory.Instance, Substitute.For(), (_, _) => false); + var messageConverter = new PublishMessageConverter(PublishDestinationType.Topic, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); + var topic = new SnsMessagePublisher(TopicArn, Sns, messageConverter, NullLoggerFactory.Instance, (_, _) => false); return Task.FromResult(topic); } diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncResponseLoggerIsCalled.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncResponseLoggerIsCalled.cs index bfd59a2c2..adae5ef15 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncResponseLoggerIsCalled.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncResponseLoggerIsCalled.cs @@ -3,6 +3,7 @@ using Amazon.SimpleNotificationService.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.Models; using JustSaying.TestingFramework; @@ -14,7 +15,6 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sns.TopicByName; public class WhenPublishingAsyncResultLoggerIsCalled : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); private const string TopicArn = "topicarn"; private const string MessageId = "TestMessage12345"; @@ -25,7 +25,8 @@ public class WhenPublishingAsyncResultLoggerIsCalled : WhenPublishingTestBase private protected override Task CreateSystemUnderTestAsync() { - var topic = new SnsMessagePublisher(TopicArn, Sns, _serializationRegister, NullLoggerFactory.Instance, Substitute.For()) + var messageConverter = new PublishMessageConverter(PublishDestinationType.Topic, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); + var topic = new SnsMessagePublisher(TopicArn, Sns, messageConverter, NullLoggerFactory.Instance) { MessageResponseLogger = (r, m) => { diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncWithGenericMessageSubjectProvider.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncWithGenericMessageSubjectProvider.cs index 98806ebe2..d25976aa9 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncWithGenericMessageSubjectProvider.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sns/TopicByName/WhenPublishingAsyncWithGenericMessageSubjectProvider.cs @@ -1,8 +1,10 @@ using Amazon.SimpleNotificationService.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.Models; +using JustSaying.UnitTests.Messaging.Channels.TestHelpers; using Microsoft.Extensions.Logging.Abstractions; using NSubstitute; @@ -10,23 +12,21 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sns.TopicByName; public class WhenPublishingAsyncWithGenericMessageSubjectProvider : WhenPublishingTestBase { - public class MessageWithTypeParameters : Message - { - } + public class MessageWithTypeParameters : Message; private const string Message = "the_message_in_json"; - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); private const string TopicArn = "topicarn"; private protected override Task CreateSystemUnderTestAsync() { - var topic = new SnsMessagePublisher(TopicArn, Sns, _serializationRegister, NullLoggerFactory.Instance, new GenericMessageSubjectProvider()); + var subject = new GenericMessageSubjectProvider().GetSubjectForType(typeof(MessageWithTypeParameters)); + var messageConverter = new PublishMessageConverter(PublishDestinationType.Topic, new FakeBodySerializer(Message), new MessageCompressionRegistry(), new PublishCompressionOptions(), subject, false); + var topic = new SnsMessagePublisher(TopicArn, Sns, messageConverter, NullLoggerFactory.Instance); return Task.FromResult(topic); } protected override void Given() { - _serializationRegister.Serialize(Arg.Any(), Arg.Is(true)).Returns(Message); Sns.FindTopicAsync("TopicName") .Returns(new Topic { TopicArn = TopicArn }); } diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishing.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishing.cs index 73fa15b6a..0ad49793f 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishing.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishing.cs @@ -1,6 +1,8 @@ +using System.Text.Json.Nodes; using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using Microsoft.Extensions.Logging; @@ -10,14 +12,15 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sqs; public class WhenPublishing : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); + private readonly PublishMessageConverter _publishMessageConverter = new(PublishDestinationType.Queue, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); private const string Url = "https://blablabla/" + QueueName; private readonly SimpleMessage _message = new() { Content = "Hello" }; private const string QueueName = "queuename"; + private string _capturedMessageBody; private protected override Task CreateSystemUnderTestAsync() { - var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _serializationRegister, Substitute.For()); + var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _publishMessageConverter, Substitute.For()); return Task.FromResult(sqs); } @@ -29,8 +32,7 @@ protected override void Given() Sqs.GetQueueAttributesAsync(Arg.Any()) .Returns(new GetQueueAttributesResponse()); - _serializationRegister.Serialize(_message, false) - .Returns("serialized_contents"); + Sqs.SendMessageAsync(Arg.Do(x => _capturedMessageBody = x.MessageBody)); } protected override async Task WhenAsync() @@ -41,8 +43,12 @@ protected override async Task WhenAsync() [Fact] public void MessageIsPublishedToQueue() { - Sqs.Received().SendMessageAsync(Arg.Is( - x => x.MessageBody.Equals("serialized_contents", StringComparison.OrdinalIgnoreCase))); + _capturedMessageBody.ShouldNotBeNull(); + var jsonNode = JsonNode.Parse(_capturedMessageBody).ShouldNotBeNull(); + var messageBody = jsonNode["Message"]!.GetValue(); + var message = JsonNode.Parse(messageBody).ShouldNotBeNull(); + var content = message["Content"].ShouldNotBeNull().GetValue(); + content.ShouldBe("Hello"); } [Fact] diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsync.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsync.cs index 74bff9492..7d48f75c0 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsync.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsync.cs @@ -1,6 +1,8 @@ +using System.Text.Json.Nodes; using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using Microsoft.Extensions.Logging; @@ -10,14 +12,15 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sqs; public class WhenPublishingAsync : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); + private readonly PublishMessageConverter _publishMessageConverter = new(PublishDestinationType.Queue, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); private const string Url = "https://blablabla/" + QueueName; private readonly SimpleMessage _message = new() { Content = "Hello" }; + private string _capturedMessageBody; private const string QueueName = "queuename"; private protected override Task CreateSystemUnderTestAsync() { - var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _serializationRegister, Substitute.For()); + var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _publishMessageConverter, Substitute.For()); return Task.FromResult(sqs); } @@ -29,8 +32,7 @@ protected override void Given() Sqs.GetQueueAttributesAsync(Arg.Any()) .Returns(new GetQueueAttributesResponse()); - _serializationRegister.Serialize(_message, false) - .Returns("serialized_contents"); + Sqs.SendMessageAsync(Arg.Do(x => _capturedMessageBody = x.MessageBody)); } protected override async Task WhenAsync() @@ -41,8 +43,12 @@ protected override async Task WhenAsync() [Fact] public void MessageIsPublishedToQueue() { - Sqs.Received().SendMessageAsync(Arg.Is( - x => x.MessageBody.Equals("serialized_contents", StringComparison.OrdinalIgnoreCase))); + _capturedMessageBody.ShouldNotBeNull(); + var jsonNode = JsonNode.Parse(_capturedMessageBody).ShouldNotBeNull(); + var messageBody = jsonNode["Message"]!.GetValue(); + var message = JsonNode.Parse(messageBody).ShouldNotBeNull(); + var content = message["Content"].ShouldNotBeNull().GetValue(); + content.ShouldBe("Hello"); } [Fact] diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsyncResponseLoggerAsyncIsCalled.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsyncResponseLoggerAsyncIsCalled.cs index 87faa815e..3ed85fa70 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsyncResponseLoggerAsyncIsCalled.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingAsyncResponseLoggerAsyncIsCalled.cs @@ -3,6 +3,7 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using Microsoft.Extensions.Logging; @@ -14,7 +15,7 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sqs; public class WhenPublishingAsyncResponseLoggerAsyncIsCalled : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); + private readonly PublishMessageConverter _publishMessageConverter = new(PublishDestinationType.Queue, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); private const string Url = "https://blablabla/" + QueueName; private readonly SimpleMessage _testMessage = new() { Content = "Hello" }; private const string QueueName = "queuename"; @@ -27,7 +28,7 @@ public class WhenPublishingAsyncResponseLoggerAsyncIsCalled : WhenPublishingTest private protected override Task CreateSystemUnderTestAsync() { - var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _serializationRegister, Substitute.For()) + var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _publishMessageConverter, Substitute.For()) { MessageResponseLogger = (r, m) => { @@ -46,9 +47,6 @@ protected override void Given() Sqs.GetQueueAttributesAsync(Arg.Any()) .Returns(new GetQueueAttributesResponse()); - _serializationRegister.Serialize(_testMessage, false) - .Returns("serialized_contents"); - Sqs.SendMessageAsync(Arg.Any()) .Returns(PublishResult); } @@ -99,4 +97,4 @@ public void MessageIsForwardedToResponseLogger() { _message.ShouldNotBeNull(); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessage.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessage.cs index d4719cac6..109ed6400 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessage.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessage.cs @@ -1,6 +1,7 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using Microsoft.Extensions.Logging; @@ -10,7 +11,7 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sqs; public class WhenPublishingDelayedMessage : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); + private readonly PublishMessageConverter _publishMessageConverter = new(PublishDestinationType.Queue, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); private const string Url = "https://testurl.com/" + QueueName; private readonly SimpleMessage _message = new(); @@ -23,7 +24,7 @@ public class WhenPublishingDelayedMessage : WhenPublishingTestBase private protected override Task CreateSystemUnderTestAsync() { - var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _serializationRegister, Substitute.For()); + var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _publishMessageConverter, Substitute.For()); return Task.FromResult(sqs); } diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessageAsync.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessageAsync.cs index fbb28a4d0..096d470c5 100644 --- a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessageAsync.cs +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingDelayedMessageAsync.cs @@ -1,6 +1,7 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.Messaging; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using Microsoft.Extensions.Logging; @@ -10,7 +11,7 @@ namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sqs; public class WhenPublishingDelayedMessageAsync : WhenPublishingTestBase { - private readonly IMessageSerializationRegister _serializationRegister = Substitute.For(); + private readonly PublishMessageConverter _publishMessageConverter = new(PublishDestinationType.Queue, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", false); private const string Url = "https://blablabla/" + QueueName; private readonly SimpleMessage _message = new(); private readonly PublishMetadata _metadata = new() @@ -21,7 +22,7 @@ public class WhenPublishingDelayedMessageAsync : WhenPublishingTestBase private protected override Task CreateSystemUnderTestAsync() { - var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _serializationRegister, Substitute.For()); + var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _publishMessageConverter, Substitute.For()); return Task.FromResult(sqs); } diff --git a/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingRawMessage.cs b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingRawMessage.cs new file mode 100644 index 000000000..8fe59809d --- /dev/null +++ b/tests/JustSaying.UnitTests/AwsTools/MessageHandling/Sqs/WhenPublishingRawMessage.cs @@ -0,0 +1,57 @@ +using System.Text.Json.Nodes; +using Amazon.SQS.Model; +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.TestingFramework; +using Microsoft.Extensions.Logging; +using NSubstitute; + +namespace JustSaying.UnitTests.AwsTools.MessageHandling.Sqs; + +public class WhenPublishingRawMessage : WhenPublishingTestBase +{ + private readonly PublishMessageConverter _publishMessageConverter = new(PublishDestinationType.Queue, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "Subject", true); + private const string Url = "https://blablabla/" + QueueName; + private readonly SimpleMessage _message = new() { Content = "Hello" }; + private const string QueueName = "queuename"; + private string _capturedMessageBody; + + private protected override Task CreateSystemUnderTestAsync() + { + var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _publishMessageConverter, Substitute.For()); + return Task.FromResult(sqs); + } + + protected override void Given() + { + Sqs.GetQueueUrlAsync(Arg.Any()) + .Returns(new GetQueueUrlResponse { QueueUrl = Url }); + + Sqs.GetQueueAttributesAsync(Arg.Any()) + .Returns(new GetQueueAttributesResponse()); + + Sqs.SendMessageAsync(Arg.Do(x => _capturedMessageBody = x.MessageBody)); + } + + protected override async Task WhenAsync() + { + await SystemUnderTest.PublishAsync(_message); + } + + [Fact] + public void MessageIsPublishedToQueue() + { + _capturedMessageBody.ShouldNotBeNull(); + var jsonNode = JsonNode.Parse(_capturedMessageBody).ShouldNotBeNull(); + var content = jsonNode["Content"].ShouldNotBeNull().GetValue(); + content.ShouldBe("Hello"); + } + + [Fact] + public void MessageIsPublishedToCorrectLocation() + { + Sqs.Received().SendMessageAsync(Arg.Is(x => x.QueueUrl == Url)); + } +} diff --git a/tests/JustSaying.UnitTests/AwsTools/SqsQueueConfiguration/Validation/WhenPublishEndpointIsNotProvided.cs b/tests/JustSaying.UnitTests/AwsTools/SqsQueueConfiguration/Validation/WhenPublishEndpointIsNotProvided.cs index e06e196b3..842f0e088 100644 --- a/tests/JustSaying.UnitTests/AwsTools/SqsQueueConfiguration/Validation/WhenPublishEndpointIsNotProvided.cs +++ b/tests/JustSaying.UnitTests/AwsTools/SqsQueueConfiguration/Validation/WhenPublishEndpointIsNotProvided.cs @@ -30,4 +30,4 @@ protected override SqsReadConfiguration CreateSystemUnderTest() PublishEndpoint = null }; } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Fluent/CompressionEncodingValidatorTests.cs b/tests/JustSaying.UnitTests/Fluent/CompressionEncodingValidatorTests.cs new file mode 100644 index 000000000..d15c5dd36 --- /dev/null +++ b/tests/JustSaying.UnitTests/Fluent/CompressionEncodingValidatorTests.cs @@ -0,0 +1,55 @@ +using JustSaying.AwsTools.MessageHandling; +using JustSaying.Fluent; +using JustSaying.Messaging.Compression; + +namespace JustSaying.UnitTests.Fluent; + +public class CompressionEncodingValidatorTests +{ + [Fact] + public void ValidateEncoding_WithNullCompressionOptions_DoesNotThrow() + { + // Arrange + var registry = new MessageCompressionRegistry(); + + // Act & Assert + CompressionEncodingValidator.ValidateEncoding(registry, null); + } + + [Fact] + public void ValidateEncoding_WithNullCompressionEncoding_DoesNotThrow() + { + // Arrange + var registry = new MessageCompressionRegistry(); + var options = new PublishCompressionOptions { CompressionEncoding = null }; + + // Act & Assert + CompressionEncodingValidator.ValidateEncoding(registry, options); + } + + [Fact] + public void ValidateEncoding_WithRegisteredEncoding_DoesNotThrow() + { + // Arrange + var gzipCompression = new GzipMessageBodyCompression(); + var registry = new MessageCompressionRegistry([gzipCompression]); + var options = new PublishCompressionOptions { CompressionEncoding = ContentEncodings.GzipBase64 }; + + // Act & Assert + CompressionEncodingValidator.ValidateEncoding(registry, options); + } + + [Fact] + public void ValidateEncoding_WithUnregisteredEncoding_ThrowsInvalidOperationException() + { + // Arrange + var registry = new MessageCompressionRegistry(); + var options = new PublishCompressionOptions { CompressionEncoding = "unknown" }; + + // Act & Assert + var exception = Assert.Throws(() => + CompressionEncodingValidator.ValidateEncoding(registry, options)); + + Assert.Equal("Compression encoding 'unknown' is not registered with the bus.", exception.Message); + } +} diff --git a/tests/JustSaying.UnitTests/Fluent/WhenUsingDefaultServiceResolver.cs b/tests/JustSaying.UnitTests/Fluent/WhenUsingDefaultServiceResolver.cs index aea392fd2..5bb32006b 100644 --- a/tests/JustSaying.UnitTests/Fluent/WhenUsingDefaultServiceResolver.cs +++ b/tests/JustSaying.UnitTests/Fluent/WhenUsingDefaultServiceResolver.cs @@ -38,13 +38,7 @@ public void ShouldResolveIMessagingConfigToMessagingConfig() [Fact] public void ShouldResolveIMessageSerializationFactoryToNewtonsoftSerializationFactory() { - _sut.ResolveService().ShouldBeOfType(); - } - - [Fact] - public void ShouldResolveIMessageSerializationRegisterToMessageSerializationRegister() - { - _sut.ResolveService().ShouldBeOfType(); + _sut.ResolveService().ShouldBeOfType(); } [Fact] diff --git a/tests/JustSaying.UnitTests/JustSaying.UnitTests.csproj b/tests/JustSaying.UnitTests/JustSaying.UnitTests.csproj index d79b10b5d..2f397a91d 100644 --- a/tests/JustSaying.UnitTests/JustSaying.UnitTests.csproj +++ b/tests/JustSaying.UnitTests/JustSaying.UnitTests.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBus.cs b/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBus.cs index e23cee990..eb460287b 100644 --- a/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBus.cs +++ b/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBus.cs @@ -1,5 +1,6 @@ using JustSaying.Messaging.Channels.Receive; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using JustSaying.UnitTests.Messaging.Channels.TestHelpers; using Microsoft.Extensions.Logging; @@ -51,10 +52,9 @@ protected virtual void Given() private JustSaying.JustSayingBus CreateSystemUnderTest() { - var serializerRegister = new FakeSerializationRegister(); var messageReceivePauseSignal = new MessageReceivePauseSignal(); var bus = new JustSaying.JustSayingBus(Config, - serializerRegister, + new NewtonsoftSerializationFactory(), messageReceivePauseSignal, LoggerFactory, Monitor); diff --git a/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBusWithoutMonitoring.cs b/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBusWithoutMonitoring.cs index d89376f0a..fffdff054 100644 --- a/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBusWithoutMonitoring.cs +++ b/tests/JustSaying.UnitTests/JustSayingBus/GivenAServiceBusWithoutMonitoring.cs @@ -1,4 +1,5 @@ using JustSaying.Messaging.Channels.Receive; +using JustSaying.Messaging.MessageSerialization; using Microsoft.Extensions.Logging; using NSubstitute; @@ -35,6 +36,6 @@ protected virtual void Given() private JustSaying.JustSayingBus CreateSystemUnderTest() { - return new JustSaying.JustSayingBus(Config, null, new MessageReceivePauseSignal(), LoggerFactory, null); + return new JustSaying.JustSayingBus(Config, new NewtonsoftSerializationFactory(), new MessageReceivePauseSignal(), LoggerFactory, null); } } diff --git a/tests/JustSaying.UnitTests/JustSayingBus/WhenPublishingMessages.cs b/tests/JustSaying.UnitTests/JustSayingBus/WhenPublishingMessages.cs index 1ae0e0b1a..7d9deea82 100644 --- a/tests/JustSaying.UnitTests/JustSayingBus/WhenPublishingMessages.cs +++ b/tests/JustSaying.UnitTests/JustSayingBus/WhenPublishingMessages.cs @@ -30,4 +30,4 @@ public void PublishMessageTimeStatsSent() { Monitor.PublishMessageTimes.ShouldHaveSingleItem(); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringMessageHandlers.cs b/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringMessageHandlers.cs index 124af09fc..fa5aa6359 100644 --- a/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringMessageHandlers.cs +++ b/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringMessageHandlers.cs @@ -1,5 +1,9 @@ using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageHandling; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Models; using JustSaying.UnitTests.AwsTools.MessageHandling; using NSubstitute; @@ -30,7 +34,11 @@ protected override void Given() protected override async Task WhenAsync() { - SystemUnderTest.AddQueue(typeof(Message).FullName, _queue); + SystemUnderTest.AddQueue(typeof(Message).FullName, new SqsSource + { + SqsQueue = _queue, + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }); SystemUnderTest.AddMessageMiddleware(_queue.QueueName, _futureHandler1); SystemUnderTest.AddMessageMiddleware(_queue.QueueName, _futureHandler2); @@ -46,4 +54,4 @@ public void HandlersAreAdded() } public class Message2 : Message { } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringSubscribers.cs b/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringSubscribers.cs index ce6ae44a2..7fcc393c2 100644 --- a/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringSubscribers.cs +++ b/tests/JustSaying.UnitTests/JustSayingBus/WhenRegisteringSubscribers.cs @@ -1,4 +1,8 @@ using Amazon.SQS.Model; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; using JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; using Newtonsoft.Json; @@ -36,8 +40,18 @@ protected override async Task WhenAsync() SystemUnderTest.AddMessageMiddleware(_queue1.QueueName, new InspectableMiddleware()); - SystemUnderTest.AddQueue("groupA", _queue1); - SystemUnderTest.AddQueue("groupB", _queue2); + var messageConverter1 = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false); + var messageConverter2 = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false); + SystemUnderTest.AddQueue("groupA", new SqsSource + { + SqsQueue = _queue1, + MessageConverter = messageConverter1 + }); + SystemUnderTest.AddQueue("groupB", new SqsSource + { + SqsQueue = _queue2, + MessageConverter = messageConverter2 + }); _cts = new CancellationTokenSource(); _cts.CancelAfter(TimeSpan.FromSeconds(5)); diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/ChannelsTests.cs b/tests/JustSaying.UnitTests/Messaging/Channels/ChannelsTests.cs index 0e0766d7d..84e58c7a2 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/ChannelsTests.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/ChannelsTests.cs @@ -1,10 +1,13 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.MessageHandling.Dispatch; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Dispatch; using JustSaying.Messaging.Channels.Multiplexer; using JustSaying.Messaging.Channels.Receive; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Messaging.Middleware.Receive; using JustSaying.Messaging.Monitoring; @@ -34,8 +37,6 @@ public ChannelsTests(ITestOutputHelper testOutputHelper) MessageMonitor = new TrackingLoggingMonitor(LoggerFactory.CreateLogger()); } - - [Fact] public async Task QueueCanBeAssignedToOnePump() { @@ -180,8 +181,9 @@ public async Task MultipleQueuesCanBeAssignedToMultiplePumps() [InlineData(10, 20, 20, 50)] public async Task WhenSubscriberNotStarted_BufferShouldFillUp_AndStopDownloading(int receivePrefetch, int receiveBufferSize, int multiplexerCapacity, int expectedDownloadCount) { - var sqsQueue = TestQueue(); - IMessageReceiveBuffer buffer = CreateMessageReceiveBuffer(sqsQueue, receivePrefetch, receiveBufferSize); + var sqsSource = TestQueue(); + var sqsQueue = sqsSource.SqsQueue as FakeSqsQueue; + IMessageReceiveBuffer buffer = CreateMessageReceiveBuffer(sqsSource, receivePrefetch, receiveBufferSize); FakeDispatcher dispatcher = new FakeDispatcher(); IMultiplexerSubscriber consumer1 = CreateSubscriber(dispatcher); IMultiplexer multiplexer = CreateMultiplexer(multiplexerCapacity); @@ -198,7 +200,7 @@ public async Task WhenSubscriberNotStarted_BufferShouldFillUp_AndStopDownloading var multiplexerCompletion = multiplexer.RunAsync(cts.Token); var bufferCompletion = buffer.RunAsync(cts.Token); - cts.CancelAfter(3.Seconds()); + cts.CancelAfter(1.Seconds()); await multiplexerCompletion.HandleCancellation(); await bufferCompletion.HandleCancellation(); @@ -224,7 +226,7 @@ public async Task Can_Be_Set_Up_Using_SubscriptionBus() var sqsQueue2 = TestQueue(); var sqsQueue3 = TestQueue(); - var queues = new List { sqsQueue1, sqsQueue2, sqsQueue3 }; + var queues = new List { sqsQueue1, sqsQueue2, sqsQueue3 }; IMessageDispatcher dispatcher = new FakeDispatcher(); var bus = CreateSubscriptionGroup(queues, dispatcher); @@ -242,7 +244,7 @@ public async Task Sqs_Queue_Is_Not_Polled_After_Cancellation() int callCountBeforeCancelled = 0; int callCountAfterCancelled = 0; - ISqsQueue sqsQueue = TestQueue(() => + var sqsQueue = TestQueue(() => { if (cts.Token.IsCancellationRequested) { @@ -275,7 +277,7 @@ public async Task Messages_Not_Dispatched_After_Cancellation() int dispatchedBeforeCancelled = 0; int dispatchedAfterCancelled = 0; - ISqsQueue sqsQueue = TestQueue(); + var sqsQueue = TestQueue(); IMessageDispatcher dispatcher = new FakeDispatcher(() => { if (cts.Token.IsCancellationRequested) @@ -305,7 +307,7 @@ public void SubscriptionGroup_StartingTwice_ShouldReturnSameCompletionTask() { var queue = TestQueue(); var dispatcher = new FakeDispatcher(); - var group = CreateSubscriptionGroup(new[] { queue }, dispatcher); + var group = CreateSubscriptionGroup([queue], dispatcher); var cts = new CancellationTokenSource(); @@ -317,7 +319,7 @@ public void SubscriptionGroup_StartingTwice_ShouldReturnSameCompletionTask() cts.Cancel(); } - private static FakeSqsQueue TestQueue(Action spy = null) + private static SqsSource TestQueue(Action spy = null) { IEnumerable GetMessages(CancellationToken cancellationToken) { @@ -329,11 +331,17 @@ IEnumerable GetMessages(CancellationToken cancellationToken) } } - return new FakeSqsQueue(ct => Task.FromResult(GetMessages(ct))); + var source = new SqsSource + { + SqsQueue = new FakeSqsQueue(ct => Task.FromResult(GetMessages(ct))), + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }; + + return source; } private MessageReceiveBuffer CreateMessageReceiveBuffer( - ISqsQueue sqsQueue, + SqsSource sqsQueue, int prefetch = 10, int receiveBufferSize = 10) { @@ -356,7 +364,7 @@ private MultiplexerSubscriber CreateSubscriber(IMessageDispatcher dispatcher) } private ISubscriptionGroup CreateSubscriptionGroup( - IList queues, + IList queues, IMessageDispatcher dispatcher) { var defaults = new SubscriptionGroupSettingsBuilder(); diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/ErrorHandlingTests.cs b/tests/JustSaying.UnitTests/Messaging/Channels/ErrorHandlingTests.cs index 594f4944a..26eb151da 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/ErrorHandlingTests.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/ErrorHandlingTests.cs @@ -1,8 +1,11 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.MessageHandling.Dispatch; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Monitoring; using JustSaying.TestingFramework; using JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; @@ -40,8 +43,6 @@ IEnumerable GetMessages() } var queue = new FakeSqsQueue(ct => Task.FromResult(GetMessages())); - - var queues = new List { queue }; IMessageDispatcher dispatcher = new FakeDispatcher(() => { @@ -52,7 +53,13 @@ IEnumerable GetMessages() .WithDefaultConcurrencyLimit(8); var settings = new Dictionary { - { "test", new SubscriptionGroupConfigBuilder("test").AddQueues(queues) }, + { + "test", new SubscriptionGroupConfigBuilder("test").AddQueue(new SqsSource + { + SqsQueue = queue, + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }) + } }; var subscriptionGroupFactory = new SubscriptionGroupFactory( @@ -93,7 +100,6 @@ IEnumerable GetMessages() } var queue = new FakeSqsQueue(ct => Task.FromResult(GetMessages())); - var queues = new List { queue }; IMessageDispatcher dispatcher = new FakeDispatcher(() => Interlocked.Increment(ref messagesDispatched)); @@ -101,7 +107,11 @@ IEnumerable GetMessages() .WithDefaultConcurrencyLimit(1); var settings = new Dictionary { - { "test", new SubscriptionGroupConfigBuilder("test").AddQueues(queues) }, + { "test", new SubscriptionGroupConfigBuilder("test").AddQueue(new SqsSource + { + SqsQueue = queue, + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }) }, }; var subscriptionGroupFactory = new SubscriptionGroupFactory( diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/Fakes/FakeSerializationRegister.cs b/tests/JustSaying.UnitTests/Messaging/Channels/Fakes/FakeSerializationRegister.cs index 99f1a8b12..47fa591c1 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/Fakes/FakeSerializationRegister.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/Fakes/FakeSerializationRegister.cs @@ -1,38 +1,16 @@ -using JustSaying.Messaging.MessageHandling; using JustSaying.Messaging.MessageSerialization; using JustSaying.Models; -using JustSaying.TestingFramework; namespace JustSaying.UnitTests.Messaging.Channels.TestHelpers; -public class FakeSerializationRegister : IMessageSerializationRegister +internal class FakeBodySerializer(string messageBody) : IMessageBodySerializer { - public Func DefaultDeserializedMessage { get; set; } + public string Serialize(Message message) => messageBody; + Message IMessageBodySerializer.Deserialize(string message) => throw new NotImplementedException(); +} - public IList ReceivedDeserializationRequests { get; } - - public FakeSerializationRegister() - { - var defaultMessage = new SimpleMessage - { - RaisingComponent = "Component", - Id = Guid.NewGuid() - }; - DefaultDeserializedMessage = () => defaultMessage; - ReceivedDeserializationRequests = new List(); - } - - public MessageWithAttributes DeserializeMessage(string body) - { - ReceivedDeserializationRequests.Add(body); - return new MessageWithAttributes(DefaultDeserializedMessage(), new MessageAttributes()); - } - - public string Serialize(Message message, bool serializeForSnsPublishing) - { - return ""; - } - - public void AddSerializer() where T : Message - { } -} \ No newline at end of file +internal class FakeBodyDeserializer(Message messageToReturn) : IMessageBodySerializer +{ + string IMessageBodySerializer.Serialize(Message message) => throw new NotImplementedException(); + public Message Deserialize(string message) => messageToReturn; +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenReceivingShouldStop.cs b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenReceivingShouldStop.cs index 94889eefa..4eb6a37d3 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenReceivingShouldStop.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenReceivingShouldStop.cs @@ -1,5 +1,9 @@ using Amazon.SQS.Model; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Messaging.Middleware.Receive; using JustSaying.TestingFramework; @@ -24,11 +28,15 @@ public WhenReceivingShouldStop(ITestOutputHelper testOutputHelper) new DelegateMiddleware>(); var messages = new List { new TestMessage() }; - var queue = new FakeSqsQueue(ct => + var queue = new SqsSource { - Interlocked.Increment(ref _callCount); - return Task.FromResult(messages.AsEnumerable()); - }); + SqsQueue = new FakeSqsQueue(ct => + { + Interlocked.Increment(ref _callCount); + return Task.FromResult(messages.AsEnumerable()); + }), + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }; _messageReceivePauseSignal = new MessageReceivePauseSignal(); diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSqsIsSlow.cs b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSqsIsSlow.cs index c6ff0bd17..664477167 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSqsIsSlow.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSqsIsSlow.cs @@ -1,5 +1,9 @@ using Amazon.SQS.Model; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Messaging.Middleware.Receive; using JustSaying.TestingFramework; @@ -23,12 +27,16 @@ public WhenSqsIsSlow(ITestOutputHelper testOutputHelper) new DelegateMiddleware>(); var messages = new List { new TestMessage() }; - var queue = new FakeSqsQueue(async ct => + var queue = new SqsSource { - await Task.Delay(100, ct); - Interlocked.Increment(ref _callCount); - return messages; - }); + SqsQueue = new FakeSqsQueue(async ct => + { + await Task.Delay(100, ct); + Interlocked.Increment(ref _callCount); + return messages; + }), + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }; var monitor = new TrackingLoggingMonitor( loggerFactory.CreateLogger()); diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSubscriberIsSlow.cs b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSubscriberIsSlow.cs index 6e939f963..6c4942230 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSubscriberIsSlow.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenSubscriberIsSlow.cs @@ -1,5 +1,9 @@ using Amazon.SQS.Model; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Messaging.Middleware.Receive; using JustSaying.TestingFramework; @@ -23,11 +27,15 @@ public WhenSubscriberIsSlow(ITestOutputHelper testOutputHelper) new DelegateMiddleware>(); var messages = new List { new TestMessage() }; - var queue = new FakeSqsQueue(ct => + var queue = new SqsSource { - Interlocked.Increment(ref _callCount); - return Task.FromResult(messages.AsEnumerable()); - }); + SqsQueue = new FakeSqsQueue(ct => + { + Interlocked.Increment(ref _callCount); + return Task.FromResult(messages.AsEnumerable()); + }), + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }; var monitor = new TrackingLoggingMonitor( loggerFactory.CreateLogger()); diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenThereAreNoSubscribers.cs b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenThereAreNoSubscribers.cs index 857deb687..336cfce4e 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenThereAreNoSubscribers.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/MessageReceiveBufferTests/WhenThereAreNoSubscribers.cs @@ -1,5 +1,9 @@ using Amazon.SQS.Model; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.Messaging.Middleware.Receive; using JustSaying.TestingFramework; @@ -26,11 +30,15 @@ public WhenThereAreNoSubscribers(ITestOutputHelper testOutputHelper) new DelegateMiddleware>(); var messages = new List { new TestMessage() }; - var queue = new FakeSqsQueue(ct => + var queue = new SqsSource { - Interlocked.Increment(ref _callCount); - return Task.FromResult(messages.AsEnumerable()); - }); + SqsQueue = new FakeSqsQueue(ct => + { + Interlocked.Increment(ref _callCount); + return Task.FromResult(messages.AsEnumerable()); + }), + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }; var monitor = new TrackingLoggingMonitor( loggerFactory.CreateLogger()); diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupCollectionTests.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupCollectionTests.cs index 764dc8228..53bc52c39 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupCollectionTests.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupCollectionTests.cs @@ -1,7 +1,9 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Monitoring; using JustSaying.TestingFramework; @@ -40,15 +42,24 @@ public async Task Add_Different_Handler_Per_Queue() var middleware1 = new InspectableMiddleware(); var middleware2 = new InspectableMiddleware(); + var messageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false); bus.AddMessageMiddleware(queueName1, middleware1); bus.AddMessageMiddleware(queueName2, middleware2); - ISqsQueue queue1 = TestQueue(bus.SerializationRegister, queueName1); - ISqsQueue queue2 = TestQueue(bus.SerializationRegister, queueName2); + ISqsQueue queue1 = await TestQueue(queueName1); + ISqsQueue queue2 = await TestQueue(queueName2); - bus.AddQueue(group1, queue1); - bus.AddQueue(group2, queue2); + bus.AddQueue(group1, new SqsSource + { + SqsQueue = queue1, + MessageConverter = messageConverter + }); + bus.AddQueue(group2, new SqsSource + { + SqsQueue = queue2, + MessageConverter = messageConverter + }); using var cts = new CancellationTokenSource(); @@ -81,11 +92,8 @@ await Patiently.AssertThatAsync(_outputHelper, private JustSaying.JustSayingBus CreateBus() { var config = Substitute.For(); - var serializationRegister = new MessageSerializationRegister( - new NonGenericMessageSubjectProvider(), - new NewtonsoftSerializationFactory()); - var bus = new JustSaying.JustSayingBus(config, serializationRegister, MessageReceivePauseSignal, LoggerFactory, MessageMonitor); + var bus = new JustSaying.JustSayingBus(config, new NewtonsoftSerializationFactory(), MessageReceivePauseSignal, LoggerFactory, MessageMonitor); var defaultSubscriptionSettings = new SubscriptionGroupSettingsBuilder() .WithDefaultMultiplexerCapacity(1) @@ -98,8 +106,7 @@ private JustSaying.JustSayingBus CreateBus() return bus; } - private static FakeSqsQueue TestQueue( - IMessageSerializationRegister messageSerializationRegister, + private static async Task TestQueue( string queueName, Action spy = null) { @@ -108,10 +115,9 @@ private static FakeSqsQueue TestQueue( QueueName = queueName, }; - var messages = new List - { - new TestMessage { Body = messageSerializationRegister.Serialize(message, false) }, - }; + var messageConverter = new PublishMessageConverter(PublishDestinationType.Queue, new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), new PublishCompressionOptions(), "TestJustSayingMessage", false); + + List messages = [new TestMessage { Body = (await messageConverter.ConvertForPublishAsync(message, null)).Body }]; var queue = new FakeSqsQueue(async ct => { diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/BaseSubscriptionGroupTests.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/BaseSubscriptionGroupTests.cs index 85c2af5d4..8cb791892 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/BaseSubscriptionGroupTests.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/BaseSubscriptionGroupTests.cs @@ -1,9 +1,12 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.MessageHandling.Dispatch; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageHandling; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware; using JustSaying.TestingFramework; using JustSaying.UnitTests.Messaging.Channels.Fakes; @@ -16,10 +19,9 @@ namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; public abstract class BaseSubscriptionGroupTests : IAsyncLifetime { - protected IList Queues; + protected IList Queues; protected MiddlewareMap MiddlewareMap; protected TrackingLoggingMonitor Monitor; - protected FakeSerializationRegister SerializationRegister; protected int ConcurrencyLimit = 8; protected ITestOutputHelper OutputHelper { get; } @@ -50,12 +52,16 @@ public async Task InitializeAsync() private void GivenInternal() { - Queues = new List(); + Queues = []; Handler = new InspectableHandler(); Monitor = new TrackingLoggingMonitor(LoggerFactory.CreateLogger()); - SerializationRegister = new FakeSerializationRegister(); MiddlewareMap = new MiddlewareMap(); CompletionMiddleware = new AwaitableMiddleware(OutputHelper); + SetupMessage = new SimpleMessage + { + RaisingComponent = "Component", + Id = Guid.NewGuid() + }; var testResolver = new InMemoryServiceResolver(OutputHelper, Monitor, sc => sc.AddSingleton>(Handler)); @@ -68,6 +74,7 @@ private void GivenInternal() Given(); } + public SimpleMessage SetupMessage { get; private set; } public AwaitableMiddleware CompletionMiddleware { get; set; } protected abstract void Given(); @@ -75,9 +82,9 @@ private void GivenInternal() // Default implementation protected virtual async Task WhenAsync() { - foreach (ISqsQueue queue in Queues) + foreach (SqsSource queue in Queues) { - MiddlewareMap.Add(queue.QueueName, Middleware); + MiddlewareMap.Add(queue.SqsQueue.QueueName, Middleware); } var cts = new CancellationTokenSource(TimeSpan.FromSeconds(20)); @@ -86,7 +93,7 @@ protected virtual async Task WhenAsync() await Patiently.AssertThatAsync(OutputHelper, () => Until() || cts.IsCancellationRequested); - cts.Cancel(); + await cts.CancelAsync(); await completion.HandleCancellation(); } @@ -98,11 +105,9 @@ protected virtual bool Until() private ISubscriptionGroup CreateSystemUnderTest() { - Logger.LogInformation("Creating MessageDispatcher with serialization register type {Type}", - SerializationRegister.GetType().FullName); + Logger.LogInformation("Creating MessageDispatcher"); var dispatcher = new MessageDispatcher( - SerializationRegister, Monitor, MiddlewareMap, LoggerFactory); @@ -125,28 +130,33 @@ protected virtual Dictionary SetupBusCon { return new Dictionary { - { "test", new SubscriptionGroupConfigBuilder("test").AddQueues(Queues) }, + ["test"] = new SubscriptionGroupConfigBuilder("test").AddQueues(Queues) }; } - protected static FakeSqsQueue CreateSuccessfulTestQueue(string queueName, params Message[] messages) + protected SqsSource CreateSuccessfulTestQueue(string queueName, params Message[] messages) { return CreateSuccessfulTestQueue(queueName, messages.AsEnumerable()); } - protected static FakeSqsQueue CreateSuccessfulTestQueue(string queueName, IEnumerable messages) + protected SqsSource CreateSuccessfulTestQueue(string queueName, IEnumerable messages) { return CreateSuccessfulTestQueue(queueName, ct => Task.FromResult(messages)); } - protected static FakeSqsQueue CreateSuccessfulTestQueue( + protected SqsSource CreateSuccessfulTestQueue( string queueName, Func>> messageProducer) { - var sqsQueue = new FakeSqsQueue( messageProducer, - queueName); + var sqsQueue = new FakeSqsQueue(messageProducer, queueName); - return sqsQueue; + return new SqsSource + { + SqsQueue = sqsQueue, + MessageConverter = new ReceivedMessageConverter(new FakeBodyDeserializer( + SetupMessage), + new MessageCompressionRegistry(), false) + }; } public Task DisposeAsync() diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandler.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandler.cs index 5565d62c6..39390a4c1 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandler.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandler.cs @@ -1,4 +1,6 @@ +using System.Text.Json; using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.Channels.SubscriptionGroups; using JustSaying.Messaging.MessageHandling; using JustSaying.Messaging.Middleware; using JustSaying.TestingFramework; @@ -11,13 +13,17 @@ namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; public class WhenExactlyOnceIsAppliedToHandler(ITestOutputHelper testOutputHelper) : BaseSubscriptionGroupTests(testOutputHelper) { - private ISqsQueue _queue; + private SqsSource _queue; private readonly int _expectedTimeout = 5; private FakeMessageLock _messageLock; protected override void Given() { - _queue = CreateSuccessfulTestQueue("TestQueue", new TestMessage()); + _queue = CreateSuccessfulTestQueue("TestQueue", + new TestMessage + { + Body = $$"""{"Subject":"SimpleMessage", "Message": "{{JsonEncodedText.Encode("""{ "Content": "Hi"} }""")}}"}""" + }); Queues.Add(_queue); @@ -41,7 +47,7 @@ protected override void Given() protected override async Task WhenAsync() { - MiddlewareMap.Add(_queue.QueueName, Middleware); + MiddlewareMap.Add(_queue.SqsQueue.QueueName, Middleware); using var cts = new CancellationTokenSource(); @@ -65,7 +71,8 @@ public void ProcessingIsPassedToTheHandler() [Fact] public void MessageIsLocked() { - var messageId = SerializationRegister.DefaultDeserializedMessage().Id.ToString(); + // this should be part of setup to make work + var messageId = SetupMessage.Id.ToString(); var tempLockRequests = _messageLock.MessageLockRequests.Where(lr => !lr.isPermanent); tempLockRequests.Count().ShouldBeGreaterThan(0); @@ -73,4 +80,4 @@ public void MessageIsLocked() pair.key.Contains(messageId, StringComparison.OrdinalIgnoreCase) && pair.howLong == TimeSpan.FromSeconds(_expectedTimeout)); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandlerWithoutExplicitTimeout.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandlerWithoutExplicitTimeout.cs index 603fd35f1..15e43a779 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandlerWithoutExplicitTimeout.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenExactlyOnceIsAppliedToHandlerWithoutExplicitTimeout.cs @@ -1,4 +1,6 @@ +using System.Text.Json; using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging.Channels.SubscriptionGroups; using JustSaying.Messaging.MessageHandling; using JustSaying.Messaging.Middleware; using JustSaying.TestingFramework; @@ -11,13 +13,17 @@ namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; public class WhenExactlyOnceIsAppliedWithoutSpecificTimeout(ITestOutputHelper testOutputHelper) : BaseSubscriptionGroupTests(testOutputHelper) { - private ISqsQueue _queue; + private SqsSource _queue; private readonly int _maximumTimeout = (int)TimeSpan.MaxValue.TotalSeconds; private FakeMessageLock _messageLock; protected override void Given() { - _queue = CreateSuccessfulTestQueue(Guid.NewGuid().ToString(), new TestMessage()); + _queue = CreateSuccessfulTestQueue(Guid.NewGuid().ToString(), + new TestMessage + { + Body = $$"""{"Subject":"SimpleMessage", "Message": "{{JsonEncodedText.Encode("""{ "Content": "Hi" }""")}}"}""" + }); Queues.Add(_queue); _messageLock = new FakeMessageLock(); @@ -39,16 +45,16 @@ protected override void Given() protected override async Task WhenAsync() { - MiddlewareMap.Add(_queue.QueueName, Middleware); + MiddlewareMap.Add(_queue.SqsQueue.QueueName, Middleware); var cts = new CancellationTokenSource(); var completion = SystemUnderTest.RunAsync(cts.Token); await Patiently.AssertThatAsync(OutputHelper, - () => Handler.ReceivedMessages.Any()); + () => !Handler.ReceivedMessages.IsEmpty); - cts.Cancel(); + await cts.CancelAsync(); await Assert.ThrowsAnyAsync(() => completion); } @@ -56,9 +62,9 @@ await Patiently.AssertThatAsync(OutputHelper, [Fact] public void MessageIsLocked() { - var messageId = SerializationRegister.DefaultDeserializedMessage().Id.ToString(); + var messageId = SetupMessage.Id.ToString(); - var tempLockRequests = _messageLock.MessageLockRequests.Where(lr => !lr.isPermanent); + var tempLockRequests = _messageLock.MessageLockRequests.Where(lr => !lr.isPermanent).ToList(); tempLockRequests.ShouldNotBeEmpty(); foreach(var lockRequest in tempLockRequests) @@ -67,4 +73,4 @@ public void MessageIsLocked() ((int)lockRequest.howLong.TotalSeconds).ShouldBe(_maximumTimeout); } } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningStartsAndStops.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningStartsAndStops.cs index f28137d11..773e5b3ae 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningStartsAndStops.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningStartsAndStops.cs @@ -1,14 +1,17 @@ +using System.Text.Json; using Amazon.SQS.Model; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; using JustSaying.Messaging.MessageProcessingStrategies; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.TestingFramework; using Microsoft.Extensions.Logging; namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; public class WhenListeningStartsAndStops(ITestOutputHelper testOutputHelper) : BaseSubscriptionGroupTests(testOutputHelper) { - private const string AttributeMessageContentsRunning = @"Message Contents Running"; - private const string AttributeMessageContentsAfterStop = @"Message Contents After Stop"; - private int _expectedMaxMessageCount; private bool _running; private FakeSqsQueue _queue; @@ -20,8 +23,8 @@ protected override void Given() Logger.LogInformation("Expected max message count is {MaxMessageCount}", _expectedMaxMessageCount); - var response1 = new Message { Body = AttributeMessageContentsRunning }; - var response2 = new Message { Body = AttributeMessageContentsAfterStop } ; + var response1 = new Message { Body = $$"""{ "Subject": "SimpleMessage", "Message": "{{JsonEncodedText.Encode(JsonSerializer.Serialize(new SimpleMessage { Content = "Message Contents Running" }))}}" }""" }; + var response2 = new Message { Body = $$"""{ "Subject": "SimpleMessage", "Message": "{{JsonEncodedText.Encode(JsonSerializer.Serialize(new SimpleMessage { Content = "Message Contents After Stop" }))}}" }""" }; IEnumerable GetMessages(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) @@ -31,9 +34,17 @@ IEnumerable GetMessages(CancellationToken cancellationToken) } } - _queue = CreateSuccessfulTestQueue(Guid.NewGuid().ToString(), ct => Task.FromResult(GetMessages(ct))); + var sqsQueue = new FakeSqsQueue(ct => Task.FromResult(GetMessages(ct)), Guid.NewGuid().ToString()); + + var sqsSource = new SqsSource + { + SqsQueue = sqsQueue, + MessageConverter = new ReceivedMessageConverter(new SystemTextJsonMessageBodySerializer(SystemTextJsonMessageBodySerializer.DefaultJsonSerializerOptions), new MessageCompressionRegistry(), false) + }; + + _queue = sqsSource.SqsQueue as FakeSqsQueue; - Queues.Add(_queue); + Queues.Add(sqsSource); } protected override async Task WhenAsync() @@ -60,7 +71,7 @@ public void TheMaxMessageAllowanceIsGrabbed() [Fact] public void MessageIsProcessed() { - SerializationRegister.ReceivedDeserializationRequests.ShouldContain(AttributeMessageContentsRunning); - SerializationRegister.ReceivedDeserializationRequests.ShouldNotContain(AttributeMessageContentsAfterStop); + Handler.ReceivedMessages.ShouldContain(m => m.Content.Equals("Message Contents Running")); + Handler.ReceivedMessages.ShouldNotContain(m => m.Content.Equals("Message Contents After Stop")); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningWithMultipleGroups.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningWithMultipleGroups.cs index daf449cc4..2fc302f7c 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningWithMultipleGroups.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenListeningWithMultipleGroups.cs @@ -1,13 +1,53 @@ -using JustSaying.AwsTools.MessageHandling; +using System.Text.Json; +using Amazon.SQS.Model; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; +using JustSaying.TestingFramework; using Newtonsoft.Json; +using JsonSerializer = System.Text.Json.JsonSerializer; namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; -public class WhenListeningWithMultipleGroups(ITestOutputHelper testOutputHelper) : BaseSubscriptionGroupTests(testOutputHelper) +public class WhenListeningWithMultipleGroups : BaseSubscriptionGroupTests { - private readonly ISqsQueue _queueB = CreateSuccessfulTestQueue("C7506B3F-81DA-4898-82A5-C0293523592A", new TestMessage()); - private readonly ISqsQueue _queueA = CreateSuccessfulTestQueue("EC159934-A30E-45B0-9186-78853F7D3BED", new TestMessage()); + private readonly SqsSource _queueA; + private readonly SqsSource _queueB; + + public WhenListeningWithMultipleGroups(ITestOutputHelper testOutputHelper) : base(testOutputHelper) + { + var queueA = new FakeSqsQueue(ct => + Task.FromResult(new List + { + new TestMessage + { + Body = $$"""{"Subject":"SimpleMessage", "Message": "{{JsonEncodedText.Encode(JsonSerializer.Serialize(new SimpleMessage { Content = "Hi" }))}}" }""" + } + }.AsEnumerable()), + "EC159934-A30E-45B0-9186-78853F7D3BED"); + var queueB = new FakeSqsQueue(ct => + Task.FromResult(new List + { + new TestMessage + { + Body = $$"""{"Subject":"SimpleMessage", "Message": "{{JsonEncodedText.Encode(JsonSerializer.Serialize(new SimpleMessage { Content = "Hi again" }))}}" }""" + } + }.AsEnumerable()), + "C7506B3F-81DA-4898-82A5-C0293523592A"); + + var messageConverter = new ReceivedMessageConverter(new SystemTextJsonMessageBodySerializer(SystemTextJsonMessageBodySerializer.DefaultJsonSerializerOptions), new MessageCompressionRegistry(), false); + _queueA = new SqsSource + { + SqsQueue = queueA, + MessageConverter = messageConverter + }; + _queueB = new SqsSource + { + SqsQueue = queueB, + MessageConverter = messageConverter + }; + } protected override Dictionary SetupBusConfig() { @@ -40,4 +80,4 @@ public void SubscriptionGroups_OverridesDefaultSettingsCorrectly() json.ShouldMatchApproved(c => c.SubFolder("Approvals")); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingFails.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingFails.cs index b0453430c..8a475d467 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingFails.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingFails.cs @@ -1,3 +1,5 @@ +using JustSaying.Messaging.Channels.SubscriptionGroups; + namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; public class WhenMessageHandlingFails(ITestOutputHelper testOutputHelper) : BaseSubscriptionGroupTests(testOutputHelper) @@ -6,9 +8,10 @@ public class WhenMessageHandlingFails(ITestOutputHelper testOutputHelper) : Base protected override void Given() { - _queue = CreateSuccessfulTestQueue(Guid.NewGuid().ToString(), new TestMessage()); + var sqsSource = CreateSuccessfulTestQueue(Guid.NewGuid().ToString(), new TestMessage()); + _queue = sqsSource.SqsQueue as FakeSqsQueue; - Queues.Add(_queue); + Queues.Add(sqsSource); Handler.ShouldSucceed = false; } @@ -29,4 +32,4 @@ public void ExceptionIsNotLoggedToMonitor() { Monitor.HandledExceptions.ShouldBeEmpty(); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingSucceeds.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingSucceeds.cs index b7b466c35..4e3bedbc7 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingSucceeds.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingSucceeds.cs @@ -1,31 +1,32 @@ +using System.Diagnostics.CodeAnalysis; using Amazon.SQS.Model; +using JustSaying.Messaging.Channels.SubscriptionGroups; namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; public class WhenMessageHandlingSucceeds(ITestOutputHelper testOutputHelper) : BaseSubscriptionGroupTests(testOutputHelper) { - private const string MessageBody = "Expected Message Body"; + [StringSyntax(StringSyntaxAttribute.Json)] + private const string MessageBody = """ + { + "Subject": "TestMessage", + "Message": "Expected Message Body" + } + """; private FakeSqsQueue _queue; protected override void Given() { - _queue = CreateSuccessfulTestQueue(Guid.NewGuid().ToString(), - ct => Task.FromResult(new List { new TestMessage { Body = MessageBody } }.AsEnumerable())); + var sqsSource = CreateSuccessfulTestQueue(Guid.NewGuid().ToString(), new TestMessage { Body = MessageBody }); + _queue = sqsSource.SqsQueue as FakeSqsQueue; - Queues.Add(_queue); - } - - [Fact] - public void MessagesGetDeserializedByCorrectHandler() - { - SerializationRegister.ReceivedDeserializationRequests.ShouldAllBe( - msg => msg == MessageBody); + Queues.Add(sqsSource); } [Fact] public void ProcessingIsPassedToTheHandlerForCorrectMessage() { - Handler.ReceivedMessages.ShouldContain(SerializationRegister.DefaultDeserializedMessage()); + Handler.ReceivedMessages.ShouldContain(SetupMessage); } [Fact] diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingThrows.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingThrows.cs index 16654bf4a..705a60579 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingThrows.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenMessageHandlingThrows.cs @@ -9,9 +9,10 @@ public class WhenMessageHandlingThrows(ITestOutputHelper testOutputHelper) : Bas protected override void Given() { - _queue = CreateSuccessfulTestQueue("TestQueue", new TestMessage()); + var sqsSource = CreateSuccessfulTestQueue("TestQueue", new TestMessage()); + _queue = sqsSource.SqsQueue as FakeSqsQueue; - Queues.Add(_queue); + Queues.Add(sqsSource); Handler.OnHandle = (msg) => { @@ -41,4 +42,4 @@ public void ExceptionIsLoggedToMonitor() { Monitor.HandledExceptions.ShouldNotBeEmpty(); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInMessageProcessing.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInMessageProcessing.cs index d17b64fca..87f16a534 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInMessageProcessing.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInMessageProcessing.cs @@ -1,6 +1,11 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; +using JustSaying.UnitTests.Messaging.Channels.TestHelpers; namespace JustSaying.UnitTests.Messaging.Channels.SubscriptionGroupTests; @@ -22,12 +27,14 @@ IEnumerable GetMessages(CancellationToken cancellationToken) } } - _queue = CreateSuccessfulTestQueue("TestQueue", ct => Task.FromResult(GetMessages(ct))); - - Queues.Add(_queue); + _queue = new FakeSqsQueue(ct => Task.FromResult(GetMessages(ct))); + var sqsSource = new SqsSource + { + SqsQueue = _queue, + MessageConverter = new ReceivedMessageConverter(new ThrowingMessageBodySerializer(), new MessageCompressionRegistry(), false) + }; - SerializationRegister.DefaultDeserializedMessage = () => - throw new TestException("Test from WhenThereAreExceptionsInMessageProcessing"); + Queues.Add(sqsSource); } protected override bool Until() @@ -41,4 +48,10 @@ public async Task TheListenerDoesNotDie() await Patiently.AssertThatAsync(OutputHelper, () => _callCount.ShouldBeGreaterThan(1)); } -} \ No newline at end of file + + private sealed class ThrowingMessageBodySerializer : IMessageBodySerializer + { + public string Serialize(Models.Message message) => throw new TestException("Test from WhenThereAreExceptionsInMessageProcessing"); + public Models.Message Deserialize(string message) => throw new TestException("Test from WhenThereAreExceptionsInMessageProcessing"); + } +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInSqsCalling.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInSqsCalling.cs index 22c59d168..bff1b0856 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInSqsCalling.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenThereAreExceptionsInSqsCalling.cs @@ -11,11 +11,11 @@ public class WhenThereAreExceptionsInSqsCalling(ITestOutputHelper testOutputHelp protected override void Given() { - _queue = CreateSuccessfulTestQueue("TestQueue", ExceptionOnFirstCall()); - Queues.Add(_queue); + var sqsSource = CreateSuccessfulTestQueue("TestQueue", ExceptionOnFirstCall()); + _queue = sqsSource.SqsQueue as FakeSqsQueue; + Queues.Add(sqsSource); - SerializationRegister.DefaultDeserializedMessage = - () => throw new TestException("Test from WhenThereAreExceptionsInMessageProcessing"); + // setup deserializer failure } private IEnumerable ExceptionOnFirstCall() @@ -39,4 +39,4 @@ public void QueueIsPolledMoreThanOnce() { _callCount.ShouldBeGreaterThan(1); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenUsingSqsQueueByName.cs b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenUsingSqsQueueByName.cs index 093955b68..e15bfd963 100644 --- a/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenUsingSqsQueueByName.cs +++ b/tests/JustSaying.UnitTests/Messaging/Channels/SubscriptionGroupTests/WhenUsingSqsQueueByName.cs @@ -1,7 +1,12 @@ using Amazon; using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; +using JustSaying.Messaging; +using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.TestingFramework; +using JustSaying.UnitTests.Messaging.Channels.TestHelpers; #pragma warning disable 618 @@ -14,6 +19,12 @@ public sealed class WhenUsingSqsQueueByName(ITestOutputHelper testOutputHelper) readonly string MessageTypeString = nameof(SimpleMessage); const string MessageBody = "object"; + private readonly SimpleMessage _message = new() + { + RaisingComponent = "Component", + Id = Guid.NewGuid() + }; + protected override void Given() { int retryCount = 1; @@ -33,13 +44,17 @@ protected override void Given() _queue = queue; - Queues.Add(_queue); + Queues.Add(new SqsSource + { + SqsQueue = queue, + MessageConverter = new ReceivedMessageConverter(new FakeBodyDeserializer(_message), new MessageCompressionRegistry(), false) + }); } [Fact] public void HandlerReceivesMessage() { - Handler.ReceivedMessages.Contains(SerializationRegister.DefaultDeserializedMessage()) + Handler.ReceivedMessages.Contains(_message) .ShouldBeTrue(); } @@ -49,26 +64,25 @@ private static ReceiveMessageResponse GenerateResponseMessages( { return new ReceiveMessageResponse { - Messages = new List - { - new() + Messages = + [ + new Message { MessageId = messageId.ToString(), Body = SqsMessageBody(messageType) }, - new() + new Message { MessageId = messageId.ToString(), - Body = "{\"Subject\":\"SOME_UNKNOWN_MESSAGE\"," + - "\"Message\":\"SOME_RANDOM_MESSAGE\"}" + Body = """{"Subject":"SOME_UNKNOWN_MESSAGE","Message":"SOME_RANDOM_MESSAGE"}""" } - } + ] }; } private static string SqsMessageBody(string messageType) { - return "{\"Subject\":\"" + messageType + "\"," + "\"Message\":\"" + MessageBody + "\"}"; + return $$"""{"Subject":"{{messageType}}","Message":"{{MessageBody}}"}"""; } public void Dispose() diff --git a/tests/JustSaying.UnitTests/Messaging/Compression/GzipMessageBodyCompressionTests.cs b/tests/JustSaying.UnitTests/Messaging/Compression/GzipMessageBodyCompressionTests.cs new file mode 100644 index 000000000..74cc2bbb0 --- /dev/null +++ b/tests/JustSaying.UnitTests/Messaging/Compression/GzipMessageBodyCompressionTests.cs @@ -0,0 +1,74 @@ +using JustSaying.Messaging.Compression; + +namespace JustSaying.UnitTests.Messaging.Compression +{ + public class GzipMessageBodyCompressionTests + { + private readonly GzipMessageBodyCompression _compression = new(); + + [Fact] + public void ContentEncoding_ShouldReturnGzipBase64() + { + Assert.Equal(ContentEncodings.GzipBase64, _compression.ContentEncoding); + } + + [Theory] + [InlineData("")] + [InlineData("Hello, World!")] + [InlineData("This is a longer string with some special characters: !@#$%^&*()_+")] + public void Compress_ThenDecompress_ShouldReturnOriginalString(string original) + { + // Arrange + + // Act + string compressed = _compression.Compress(original); + string decompressed = _compression.Decompress(compressed); + + // Assert + Assert.Equal(original, decompressed); + } + + [Fact] + public void Compress_ShouldReturnBase64EncodedString() + { + // Arrange + string input = "Test string"; + + // Act + string compressed = _compression.Compress(input); + + // Assert + Assert.True(IsBase64String(compressed)); + } + + [Fact] + public void Decompress_WithInvalidBase64_ShouldThrowFormatException() + { + // Arrange + string invalidBase64 = "This is not a valid Base64 string"; + + // Act & Assert + Assert.Throws(() => _compression.Decompress(invalidBase64)); + } + + [Fact] + public void Compress_WithLargeString_ShouldCompressSuccessfully() + { + // Arrange + string largeString = new string('A', 1000000); // 1 million 'A' characters + + // Act + string compressed = _compression.Compress(largeString); + string decompressed = _compression.Decompress(compressed); + + // Assert + Assert.Equal(largeString, decompressed); + } + + private bool IsBase64String(string base64) + { + Span buffer = new Span(new byte[base64.Length]); + return Convert.TryFromBase64String(base64, buffer, out int _); + } + } +} diff --git a/tests/JustSaying.UnitTests/Messaging/Policies/ChannelPolicyTests.cs b/tests/JustSaying.UnitTests/Messaging/Policies/ChannelPolicyTests.cs index ef933f15b..4c9471866 100644 --- a/tests/JustSaying.UnitTests/Messaging/Policies/ChannelPolicyTests.cs +++ b/tests/JustSaying.UnitTests/Messaging/Policies/ChannelPolicyTests.cs @@ -1,8 +1,11 @@ using Amazon.SQS.Model; using JustSaying.AwsTools.MessageHandling; using JustSaying.AwsTools.MessageHandling.Dispatch; +using JustSaying.Messaging; using JustSaying.Messaging.Channels.Receive; using JustSaying.Messaging.Channels.SubscriptionGroups; +using JustSaying.Messaging.Compression; +using JustSaying.Messaging.MessageSerialization; using JustSaying.Messaging.Middleware.Receive; using JustSaying.Messaging.Monitoring; using JustSaying.TestingFramework; @@ -36,8 +39,6 @@ public async Task ErrorHandlingAroundSqs_WithCustomPolicy_CanSwallowExceptions() int dispatchedMessageCount = 0; var sqsQueue = TestQueue(() => Interlocked.Increment(ref queueCalledCount)); - var queues = new List { sqsQueue }; - var config = new SubscriptionGroupSettingsBuilder() .WithDefaultConcurrencyLimit(8); config.WithCustomMiddleware( @@ -45,7 +46,13 @@ public async Task ErrorHandlingAroundSqs_WithCustomPolicy_CanSwallowExceptions() var settings = new Dictionary { - { "test", new SubscriptionGroupConfigBuilder("test").AddQueues(queues) }, + { + "test", new SubscriptionGroupConfigBuilder("test").AddQueue(new SqsSource + { + SqsQueue = sqsQueue, + MessageConverter = new ReceivedMessageConverter(new NewtonsoftMessageBodySerializer(), new MessageCompressionRegistry(), false) + }) + } }; IMessageDispatcher dispatcher = new FakeDispatcher(() => Interlocked.Increment(ref dispatchedMessageCount)); diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/DealingWithPotentiallyMissingConversation.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/DealingWithPotentiallyMissingConversation.cs index aee4bebfe..976dd227e 100644 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/DealingWithPotentiallyMissingConversation.cs +++ b/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/DealingWithPotentiallyMissingConversation.cs @@ -3,23 +3,23 @@ namespace JustSaying.UnitTests.Messaging.Serialization.Newtonsoft; -public class DealingWithPotentiallyMissingConversation : XBehaviourTest +public class DealingWithPotentiallyMissingConversation : XBehaviourTest> { private MessageWithEnum _messageOut; private MessageWithEnum _messageIn; private string _jsonMessage; protected override void Given() { - _messageOut = new MessageWithEnum() { EnumVal = Value.Two }; + _messageOut = new MessageWithEnum { EnumVal = Value.Two }; } protected override void WhenAction() { - _jsonMessage = SystemUnderTest.Serialize(_messageOut, false, _messageOut.GetType().Name); + _jsonMessage = SystemUnderTest.Serialize(_messageOut); //add extra property to see what happens: - _jsonMessage = _jsonMessage.Replace("{__", "{\"New\":\"Property\",__", StringComparison.OrdinalIgnoreCase); - _messageIn = SystemUnderTest.Deserialize(_jsonMessage, typeof(MessageWithEnum)) as MessageWithEnum; + _jsonMessage = _jsonMessage.Replace("{__", """{"New":"Property",__""", StringComparison.OrdinalIgnoreCase); + _messageIn = SystemUnderTest.Deserialize(_jsonMessage) as MessageWithEnum; } [Fact] @@ -33,4 +33,4 @@ public void DeserializedMessageHasEmptyConversation_ThisIsForBackwardsCompatibil { _messageIn.Conversation.ShouldBeNull(); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenAskingForANewSerializer.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenAskingForANewSerializer.cs deleted file mode 100644 index 508ef31be..000000000 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenAskingForANewSerializer.cs +++ /dev/null @@ -1,25 +0,0 @@ -using JustSaying.Messaging.MessageSerialization; -using JustSaying.TestingFramework; - -namespace JustSaying.UnitTests.Messaging.Serialization.Newtonsoft; - -public class WhenAskingForANewSerializer : XBehaviourTest -{ - private IMessageSerializer _result; - - protected override void Given() - { - - } - - protected override void WhenAction() - { - _result = SystemUnderTest.GetSerializer(); - } - - [Fact] - public void OneIsProvided() - { - _result.ShouldNotBeNull(); - } -} \ No newline at end of file diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenSerializingAndDeserializing.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenSerializingAndDeserializing.cs index 519e72884..631c91739 100644 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenSerializingAndDeserializing.cs +++ b/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenSerializingAndDeserializing.cs @@ -3,20 +3,20 @@ namespace JustSaying.UnitTests.Messaging.Serialization.Newtonsoft; -public class WhenSerializingAndDeserializing : XBehaviourTest +public class WhenSerializingAndDeserializing : XBehaviourTest> { private MessageWithEnum _messageOut; private MessageWithEnum _messageIn; private string _jsonMessage; protected override void Given() { - _messageOut = new MessageWithEnum() { EnumVal = Value.Two }; + _messageOut = new MessageWithEnum { EnumVal = Value.Two }; } protected override void WhenAction() { - _jsonMessage = SystemUnderTest.Serialize(_messageOut, false, _messageOut.GetType().Name); - _messageIn = SystemUnderTest.Deserialize(_jsonMessage, typeof(MessageWithEnum)) as MessageWithEnum; + _jsonMessage = SystemUnderTest.Serialize(_messageOut); + _messageIn = SystemUnderTest.Deserialize(_jsonMessage) as MessageWithEnum; } [Fact] @@ -39,4 +39,4 @@ public void EnumsAreRepresentedAsStrings() _jsonMessage.ShouldContain("EnumVal"); _jsonMessage.ShouldContain("Two"); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenUsingCustomSettings.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenUsingCustomSettings.cs index 5ceea37a0..d767ea914 100644 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenUsingCustomSettings.cs +++ b/tests/JustSaying.UnitTests/Messaging/Serialization/Newtonsoft/WhenUsingCustomSettings.cs @@ -4,14 +4,14 @@ namespace JustSaying.UnitTests.Messaging.Serialization.Newtonsoft; -public class WhenUsingCustomSettings : XBehaviourTest +public class WhenUsingCustomSettings : XBehaviourTest> { private MessageWithEnum _messageOut; private string _jsonMessage; - protected override NewtonsoftSerializer CreateSystemUnderTest() + protected override NewtonsoftMessageBodySerializer CreateSystemUnderTest() { - return new NewtonsoftSerializer(new JsonSerializerSettings()); + return new NewtonsoftMessageBodySerializer(new JsonSerializerSettings()); } protected override void Given() @@ -21,7 +21,7 @@ protected override void Given() public string GetMessageInContext(MessageWithEnum message) { - var context = new { Subject = message.GetType().Name, Message = SystemUnderTest.Serialize(message, false, message.GetType().Name) }; + var context = new { Subject = message.GetType().Name, Message = SystemUnderTest.Serialize(message) }; return JsonConvert.SerializeObject(context); } @@ -42,4 +42,4 @@ public void EnumsAreNotRepresentedAsStrings() _jsonMessage.ShouldContain("EnumVal"); _jsonMessage.ShouldNotContain("Two"); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/CustomMessage.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/CustomMessage.cs deleted file mode 100644 index a135206bb..000000000 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/CustomMessage.cs +++ /dev/null @@ -1,7 +0,0 @@ -using JustSaying.Models; - -namespace JustSaying.UnitTests.Messaging.Serialization.SerializationRegister; - -public class CustomMessage : Message -{ -} \ No newline at end of file diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/WhenAddingASerializerTwice.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/WhenAddingASerializerTwice.cs deleted file mode 100644 index 71266c68b..000000000 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/WhenAddingASerializerTwice.cs +++ /dev/null @@ -1,29 +0,0 @@ -using JustSaying.Messaging.MessageSerialization; -using JustSaying.Models; - -namespace JustSaying.UnitTests.Messaging.Serialization.SerializationRegister; - -public class WhenAddingASerializerTwice : XBehaviourTest -{ - protected override MessageSerializationRegister CreateSystemUnderTest() => - new( - new NonGenericMessageSubjectProvider(), - new NewtonsoftSerializationFactory()); - - protected override void Given() - { - RecordAnyExceptionsThrown(); - } - - protected override void WhenAction() - { - SystemUnderTest.AddSerializer(); - SystemUnderTest.AddSerializer(); - } - - [Fact] - public void ExceptionIsNotThrown() - { - ThrownException.ShouldBeNull(); - } -} \ No newline at end of file diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/WhenDeserializingMessage.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/WhenDeserializingMessage.cs deleted file mode 100644 index 9a46693a6..000000000 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/SerializationRegister/WhenDeserializingMessage.cs +++ /dev/null @@ -1,28 +0,0 @@ -using JustSaying.Messaging.MessageSerialization; - -namespace JustSaying.UnitTests.Messaging.Serialization.SerializationRegister; - -public class WhenDeserializingMessage : XBehaviourTest -{ - protected override MessageSerializationRegister CreateSystemUnderTest() => - new( - new NonGenericMessageSubjectProvider(), - new NewtonsoftSerializationFactory()); - - private string messageBody = "{'Subject':'nonexistent'}"; - protected override void Given() - { - RecordAnyExceptionsThrown(); - } - - protected override void WhenAction() - { - SystemUnderTest.AddSerializer(); - } - - [Fact] - public void ThrowsMessageFormatNotSupportedWhenMessabeBodyIsUnserializable() - { - Assert.Throws(() => SystemUnderTest.DeserializeMessage(messageBody)); - } -} \ No newline at end of file diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/DealingWithPotentiallyMissingConversation.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/DealingWithPotentiallyMissingConversation.cs index 596dda031..9088836af 100644 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/DealingWithPotentiallyMissingConversation.cs +++ b/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/DealingWithPotentiallyMissingConversation.cs @@ -3,24 +3,29 @@ namespace JustSaying.UnitTests.Messaging.Serialization.SystemTextJson; -public class DealingWithPotentiallyMissingConversation : XBehaviourTest +public class DealingWithPotentiallyMissingConversation : XBehaviourTest> { private MessageWithEnum _messageOut; private MessageWithEnum _messageIn; private string _jsonMessage; + protected override SystemTextJsonMessageBodySerializer CreateSystemUnderTest() + { + return new SystemTextJsonMessageBodySerializer(SystemTextJsonMessageBodySerializer.DefaultJsonSerializerOptions); + } + protected override void Given() { - _messageOut = new MessageWithEnum() { EnumVal = Value.Two }; + _messageOut = new MessageWithEnum { EnumVal = Value.Two }; } protected override void WhenAction() { - _jsonMessage = SystemUnderTest.Serialize(_messageOut, false, _messageOut.GetType().Name); + _jsonMessage = SystemUnderTest.Serialize(_messageOut); // Add extra property to see what happens: - _jsonMessage = _jsonMessage.Replace("{__", "{\"New\":\"Property\",__", StringComparison.OrdinalIgnoreCase); - _messageIn = SystemUnderTest.Deserialize(_jsonMessage, typeof(MessageWithEnum)) as MessageWithEnum; + _jsonMessage = _jsonMessage.Replace("{__", """{"New":"Property",__""", StringComparison.OrdinalIgnoreCase); + _messageIn = SystemUnderTest.Deserialize(_jsonMessage) as MessageWithEnum; } [Fact] @@ -34,4 +39,4 @@ public void DeserializedMessageHasEmptyConversation_ThisIsForBackwardsCompatibil { _messageIn.Conversation.ShouldBeNull(); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenAskingForANewSerializer.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenAskingForANewSerializer.cs deleted file mode 100644 index 0acc316cf..000000000 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenAskingForANewSerializer.cs +++ /dev/null @@ -1,24 +0,0 @@ -using JustSaying.Messaging.MessageSerialization; -using JustSaying.TestingFramework; - -namespace JustSaying.UnitTests.Messaging.Serialization.SystemTextJson; - -public class WhenAskingForANewSerializer : XBehaviourTest -{ - private IMessageSerializer _result; - - protected override void Given() - { - } - - protected override void WhenAction() - { - _result = SystemUnderTest.GetSerializer(); - } - - [Fact] - public void OneIsProvided() - { - _result.ShouldNotBeNull(); - } -} \ No newline at end of file diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenSerializingAndDeserializing.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenSerializingAndDeserializing.cs index ed36f2232..62f2903e4 100644 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenSerializingAndDeserializing.cs +++ b/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenSerializingAndDeserializing.cs @@ -3,21 +3,26 @@ namespace JustSaying.UnitTests.Messaging.Serialization.SystemTextJson; -public class WhenSerializingAndDeserializing : XBehaviourTest +public class WhenSerializingAndDeserializing : XBehaviourTest> { private MessageWithEnum _messageOut; private MessageWithEnum _messageIn; private string _jsonMessage; + protected override SystemTextJsonMessageBodySerializer CreateSystemUnderTest() + { + return new SystemTextJsonMessageBodySerializer(SystemTextJsonMessageBodySerializer.DefaultJsonSerializerOptions); + } + protected override void Given() { - _messageOut = new MessageWithEnum() { EnumVal = Value.Two }; + _messageOut = new MessageWithEnum { EnumVal = Value.Two }; } protected override void WhenAction() { - _jsonMessage = SystemUnderTest.Serialize(_messageOut, false, _messageOut.GetType().Name); - _messageIn = SystemUnderTest.Deserialize(_jsonMessage, typeof(MessageWithEnum)) as MessageWithEnum; + _jsonMessage = SystemUnderTest.Serialize(_messageOut); + _messageIn = SystemUnderTest.Deserialize(_jsonMessage) as MessageWithEnum; } [Fact] @@ -40,4 +45,4 @@ public void EnumsAreRepresentedAsStrings() _jsonMessage.ShouldContain("EnumVal"); _jsonMessage.ShouldContain("Two"); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenUsingCustomSettings.cs b/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenUsingCustomSettings.cs index 7523c64e1..fbb017f7b 100644 --- a/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenUsingCustomSettings.cs +++ b/tests/JustSaying.UnitTests/Messaging/Serialization/SystemTextJson/WhenUsingCustomSettings.cs @@ -5,14 +5,14 @@ namespace JustSaying.UnitTests.Messaging.Serialization.SystemTextJson; -public class WhenUsingCustomSettings : XBehaviourTest +public class WhenUsingCustomSettings : XBehaviourTest> { private MessageWithEnum _messageOut; private string _jsonMessage; - protected override SystemTextJsonSerializer CreateSystemUnderTest() + protected override SystemTextJsonMessageBodySerializer CreateSystemUnderTest() { - return new SystemTextJsonSerializer(new JsonSerializerOptions()); + return new SystemTextJsonMessageBodySerializer(new JsonSerializerOptions()); } protected override void Given() @@ -22,7 +22,7 @@ protected override void Given() public string GetMessageInContext(MessageWithEnum message) { - var context = new { Subject = message.GetType().Name, Message = SystemUnderTest.Serialize(message, false, message.GetType().Name) }; + var context = new { Subject = message.GetType().Name, Message = SystemUnderTest.Serialize(message) }; return JsonConvert.SerializeObject(context); } @@ -43,4 +43,4 @@ public void EnumsAreNotRepresentedAsStrings() _jsonMessage.ShouldContain("EnumVal"); _jsonMessage.ShouldNotContain("Two"); } -} \ No newline at end of file +} diff --git a/tests/JustSaying.UnitTests/XBehaviourTest.cs b/tests/JustSaying.UnitTests/XBehaviourTest.cs index 42d8273aa..0b166f6e5 100644 --- a/tests/JustSaying.UnitTests/XBehaviourTest.cs +++ b/tests/JustSaying.UnitTests/XBehaviourTest.cs @@ -43,4 +43,4 @@ protected void RecordAnyExceptionsThrown() } protected abstract void WhenAction(); -} \ No newline at end of file +}