コード例 #1
0
        /// <inheritdoc />
        void IPublicationBuilder <T> .Configure(
            JustSayingBus bus,
            IAwsClientFactoryProxy proxy,
            ILoggerFactory loggerFactory)
        {
            var logger = loggerFactory.CreateLogger <QueuePublicationBuilder <T> >();

            logger.LogInformation("Adding SQS publisher for message type '{MessageType}'.",
                                  typeof(T));

            var config = bus.Config;
            var region = config.Region ?? throw new InvalidOperationException($"Config cannot have a blank entry for the {nameof(config.Region)} property.");

            var writeConfiguration = new SqsWriteConfiguration();

            ConfigureWrites?.Invoke(writeConfiguration);
            writeConfiguration.ApplyQueueNamingConvention <T>(config.QueueNamingConvention);

            bus.SerializationRegister.AddSerializer <T>();

            var regionEndpoint = RegionEndpoint.GetBySystemName(region);
            var sqsClient      = proxy.GetAwsClientFactory().GetSqsClient(regionEndpoint);

            var eventPublisher = new SqsMessagePublisher(
                sqsClient,
                bus.SerializationRegister,
                loggerFactory)
            {
                MessageResponseLogger = config.MessageResponseLogger
            };

#pragma warning disable 618
            var sqsQueue = new SqsQueueByName(
                regionEndpoint,
                writeConfiguration.QueueName,
                sqsClient,
                writeConfiguration.RetryCountBeforeSendingToErrorQueue,
                loggerFactory);
#pragma warning restore 618

            async Task StartupTask(CancellationToken cancellationToken)
            {
                if (!await sqsQueue.ExistsAsync(cancellationToken).ConfigureAwait(false))
                {
                    await sqsQueue.CreateAsync(writeConfiguration, cancellationToken : cancellationToken).ConfigureAwait(false);
                }

                eventPublisher.QueueUrl = sqsQueue.Uri;
            }

            bus.AddStartupTask(StartupTask);

            bus.AddMessagePublisher <T>(eventPublisher);

            logger.LogInformation(
                "Created SQS publisher for message type '{MessageType}' on queue '{QueueName}'.",
                typeof(T),
                writeConfiguration.QueueName);
        }
        private protected override Task <SqsMessagePublisher> CreateSystemUnderTestAsync()
        {
            var sqs = new SqsMessagePublisher(new Uri(Url), Sqs, _serializationRegister, Substitute.For <ILoggerFactory>())
            {
                MessageResponseLogger = (r, m) =>
                {
                    _response = r;
                    _message  = m;
                }
            };

            return(Task.FromResult(sqs));
        }
コード例 #3
0
    /// <inheritdoc />
    public void Configure(JustSayingBus bus, IAwsClientFactoryProxy proxy, ILoggerFactory loggerFactory)
    {
        var logger = loggerFactory.CreateLogger <TopicAddressPublicationBuilder <T> >();

        logger.LogInformation("Adding SQS publisher for message type '{MessageType}'", typeof(T));

        bus.SerializationRegister.AddSerializer <T>();

        var eventPublisher = new SqsMessagePublisher(
            _queueAddress.QueueUrl,
            proxy.GetAwsClientFactory().GetSqsClient(RegionEndpoint.GetBySystemName(_queueAddress.RegionName)),
            bus.SerializationRegister,
            loggerFactory);

        bus.AddMessagePublisher <T>(eventPublisher);

        logger.LogInformation(
            "Created SQS queue publisher on queue URL '{QueueName}' for message type '{MessageType}'",
            _queueAddress.QueueUrl,
            typeof(T));
    }