Beispiel #1
0
 /// <summary>
 /// An Azure Service Bus Message producer <see cref="IAmAMessageProducer"/>
 /// </summary>
 /// <param name="administrationClientWrapper">The administrative client.</param>
 /// <param name="serviceBusSenderProvider">The provider to use when producing messages.</param>
 /// <param name="makeChannel">Behaviour to use when verifying Channels <see cref="OnMissingChannel"/>.</param>
 /// <param name="bulkSendBatchSize">When sending more than one message using the MessageProducer, the max amount to send in a single transmission.</param>
 public AzureServiceBusMessageProducer(IAdministrationClientWrapper administrationClientWrapper, IServiceBusSenderProvider serviceBusSenderProvider, OnMissingChannel makeChannel = OnMissingChannel.Create, int bulkSendBatchSize = 10)
 {
     _administrationClientWrapper = administrationClientWrapper;
     _serviceBusSenderProvider    = serviceBusSenderProvider;
     _makeChannel       = makeChannel;
     _bulkSendBatchSize = bulkSendBatchSize;
 }
        public ASBConsumerTests()
        {
            var command = new ASBTestCommand()
            {
                CommandValue  = "Do the things.",
                CommandNumber = 26
            };

            _correlationId = Guid.NewGuid();
            _channelName   = $"Consumer-Tests-{Guid.NewGuid()}".Truncate(50);
            _topicName     = $"Consumer-Tests-{Guid.NewGuid()}";
            var routingKey = new RoutingKey(_topicName);

            AzureServiceBusSubscription <ASBTestCommand> subscription = new(
                name : new SubscriptionName(_channelName),
                channelName : new ChannelName(_channelName),
                routingKey : routingKey
                );

            _contentType = "application/json";

            _message = new Message(
                new MessageHeader(command.Id, _topicName, MessageType.MT_COMMAND, _correlationId, contentType: _contentType),
                new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))
                );

            _subscriptionConfiguration = new AzureServiceBusSubscriptionConfiguration()
            {
                DeadLetteringOnMessageExpiration = true,
                DefaultMessageTimeToLive         = TimeSpan.FromDays(4),
                LockDuration     = TimeSpan.FromMinutes(3),
                MaxDeliveryCount = 7,
                SqlFilter        = "1=1"
            };

            var clientProvider = ASBCreds.ASBClientProvider;

            _administrationClient = new AdministrationClientWrapper(clientProvider);
            _administrationClient.CreateSubscription(_topicName, _channelName, _subscriptionConfiguration);

            _serviceBusClient = clientProvider.GetServiceBusClient();

            var channelFactory =
                new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(clientProvider, false));

            _channel = channelFactory.CreateChannel(subscription);

            _producerRegistry = new AzureServiceBusProducerRegistryFactory(
                clientProvider,
                new AzureServiceBusPublication[]
            {
                new AzureServiceBusPublication {
                    Topic = new RoutingKey(_topicName)
                }
            }
                )
                                .Create();
        }
        public ASBProducerTests()
        {
            _command = new ASBTestCommand()
            {
                CommandValue  = "Do the things.",
                CommandNumber = 26
            };

            _correlationId = Guid.NewGuid();
            var channelName = $"Producer-Send-Tests-{Guid.NewGuid()}".Truncate(50);

            _topicName = $"Producer-Send-Tests-{Guid.NewGuid()}";
            var routingKey = new RoutingKey(_topicName);

            AzureServiceBusSubscription <ASBTestCommand> subscription = new(
                name : new SubscriptionName(channelName),
                channelName : new ChannelName(channelName),
                routingKey : routingKey
                );

            _contentType = "application/json";

            _message = new Message(
                new MessageHeader(_command.Id, _topicName, MessageType.MT_COMMAND, _correlationId, contentType: _contentType),
                new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options))
                );

            var clientProvider = ASBCreds.ASBClientProvider;

            _administrationClient = new AdministrationClientWrapper(clientProvider);
            _administrationClient.CreateSubscription(_topicName, channelName, new AzureServiceBusSubscriptionConfiguration());

            var channelFactory =
                new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(clientProvider, false));

            _channel = channelFactory.CreateChannel(subscription);

            _producerRegistry = new AzureServiceBusProducerRegistryFactory(
                clientProvider,
                new AzureServiceBusPublication[]
            {
                new AzureServiceBusPublication {
                    Topic = new RoutingKey(_topicName)
                }
            }
                )
                                .Create();
        }
        /// <summary>
        /// Initializes an Instance of <see cref="AzureServiceBusConsumer"/>
        /// </summary>
        /// <param name="topicName">The name of the Topic.</param>
        /// <param name="subscriptionName">The name of the Subscription on the Topic.</param>
        /// <param name="messageProducerSync">An instance of the Messaging Producer used for Requeue.</param>
        /// <param name="administrationClientWrapper">An Instance of Administration Client Wrapper.</param>
        /// <param name="serviceBusReceiverProvider">An Instance of <see cref="ServiceBusReceiverProvider"/>.</param>
        /// <param name="batchSize">How many messages to receive at a time.</param>
        /// <param name="receiveMode">The mode in which to Receive.</param>
        /// <param name="makeChannels">The mode in which to make Channels.</param>
        /// <param name="subscriptionConfiguration">The configuration options for the subscriptions.</param>
        public AzureServiceBusConsumer(string topicName, string subscriptionName,
                                       IAmAMessageProducerSync messageProducerSync, IAdministrationClientWrapper administrationClientWrapper,
                                       IServiceBusReceiverProvider serviceBusReceiverProvider, int batchSize = 10,
                                       ServiceBusReceiveMode receiveMode = ServiceBusReceiveMode.ReceiveAndDelete,
                                       OnMissingChannel makeChannels     = OnMissingChannel.Create,
                                       AzureServiceBusSubscriptionConfiguration subscriptionConfiguration = default)
        {
            _subscriptionName            = subscriptionName;
            _topicName                   = topicName;
            _messageProducerSync         = messageProducerSync;
            _administrationClientWrapper = administrationClientWrapper;
            _serviceBusReceiverProvider  = serviceBusReceiverProvider;
            _batchSize                   = batchSize;
            _makeChannel                 = makeChannels;
            _subscriptionConfiguration   = subscriptionConfiguration ?? new AzureServiceBusSubscriptionConfiguration();
            _receiveMode                 = receiveMode;

            GetMessageReceiverProvider();
        }