diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusConsumer.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusConsumer.cs index ebff0345a9..c0d94aee62 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusConsumer.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusConsumer.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using Azure.Messaging.ServiceBus; using Microsoft.Extensions.Logging; using Paramore.Brighter.Logging; diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/IServiceBusSenderWrapper.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/IServiceBusSenderWrapper.cs index 161b4882a4..4cb4352e40 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/IServiceBusSenderWrapper.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/IServiceBusSenderWrapper.cs @@ -10,23 +10,6 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.AzureServiceBusWrap /// public interface IServiceBusSenderWrapper { - /// - /// Send a Message - /// - /// The message to send. - void Send(ServiceBusMessage message); - - /// - /// Schedule a message to be sent. - /// - /// Message to be scheduled. - /// The time to scheduled the message. - void ScheduleMessage(ServiceBusMessage message, DateTimeOffset scheduleEnqueueTime); - - /// - /// Close the Connection. - /// - void Close(); /// /// Send a Message diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/ServiceBusSenderWrapper.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/ServiceBusSenderWrapper.cs index db247d31b2..1c433785bf 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/ServiceBusSenderWrapper.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/AzureServiceBusWrappers/ServiceBusSenderWrapper.cs @@ -15,22 +15,6 @@ internal ServiceBusSenderWrapper(ServiceBusSender serviceBusSender) _serviceBusSender = serviceBusSender; } - public void Send(ServiceBusMessage message) - { - //Azure Service Bus only supports IsolationLevel.Serializable if in a transaction - if (Transaction.Current != null && Transaction.Current.IsolationLevel != IsolationLevel.Serializable) - { - using (new TransactionScope(TransactionScopeOption.Suppress)) - { - _serviceBusSender.SendMessageAsync(message).Wait(); - } - } - else - { - _serviceBusSender.SendMessageAsync(message).Wait(); - } - } - public async Task SendAsync(ServiceBusMessage message, CancellationToken cancellationToken = default) { @@ -53,22 +37,12 @@ public Task SendAsync(ServiceBusMessage[] messages, CancellationToken cancellati return _serviceBusSender.SendMessagesAsync(messages, cancellationToken); } - public void ScheduleMessage(ServiceBusMessage message, DateTimeOffset scheduleEnqueueTime) - { - _serviceBusSender.ScheduleMessageAsync(message, scheduleEnqueueTime).Wait(); - } - public async Task ScheduleMessageAsync(ServiceBusMessage message, DateTimeOffset scheduleEnqueueTime, CancellationToken cancellationToken = default) { await _serviceBusSender.ScheduleMessageAsync(message, scheduleEnqueueTime, cancellationToken); } - public void Close() - { - _serviceBusSender.CloseAsync().Wait(); - } - public Task CloseAsync() { return _serviceBusSender.CloseAsync(); diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusChainedClientProvider.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusChainedClientProvider.cs index cff93b27a3..99549ea5f4 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusChainedClientProvider.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusChainedClientProvider.cs @@ -6,11 +6,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider { - public class ServiceBusChainedClientProvider : IServiceBusClientProvider + public class ServiceBusChainedClientProvider : ServiceBusClientProvider { - private readonly string _fullyQualifiedNameSpace; - - private readonly ChainedTokenCredential _tokenCredential; + protected override ServiceBusClient Client { get; } + protected override ServiceBusAdministrationClient AdminClient { get; } /// /// Initializes an implementation is using Default Azure Credentials for Authentication. @@ -31,26 +30,9 @@ public ServiceBusChainedClientProvider(string fullyQualifiedNameSpace, params To "Credential Sources is null or empty, ensure this is set in the constructor."); } - _tokenCredential = new ChainedTokenCredential(credentialSources); - _fullyQualifiedNameSpace = fullyQualifiedNameSpace; - } - - /// - /// Provides an Azure Service Bus Client - /// - /// Azure Service Bus Client - public ServiceBusClient GetServiceBusClient() - { - return new ServiceBusClient(_fullyQualifiedNameSpace, _tokenCredential); - } - - /// - /// Provides an Azure Service Bus Administration Client - /// - /// Azure Service Bus Administration Client - public ServiceBusAdministrationClient GetServiceBusAdministrationClient() - { - return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, _tokenCredential); + Client = new ServiceBusClient(fullyQualifiedNameSpace, new ChainedTokenCredential(credentialSources)); + AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace, + new ChainedTokenCredential(credentialSources)); } } } diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusClientProvider.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusClientProvider.cs new file mode 100644 index 0000000000..049075bf69 --- /dev/null +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusClientProvider.cs @@ -0,0 +1,23 @@ +using Azure.Messaging.ServiceBus; +using Azure.Messaging.ServiceBus.Administration; + +namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider +{ + public abstract class ServiceBusClientProvider : IServiceBusClientProvider + { + protected abstract ServiceBusClient Client { get; } + protected abstract ServiceBusAdministrationClient AdminClient { get; } + + /// + /// Provides an Azure Service Bus Client + /// + /// Azure Service Bus Client + public ServiceBusClient GetServiceBusClient() => Client; + + /// + /// Provides an Azure Service Bus Administration Client + /// + /// Azure Service Bus Administration Client + public ServiceBusAdministrationClient GetServiceBusAdministrationClient() => AdminClient; + } +} diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusConnectionStringClientProvider.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusConnectionStringClientProvider.cs index cb5e5cad10..fd6cb40ddf 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusConnectionStringClientProvider.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusConnectionStringClientProvider.cs @@ -7,9 +7,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider /// /// Provides Azure Service Bus Clients using a Connection String. /// - public class ServiceBusConnectionStringClientProvider : IServiceBusClientProvider + public class ServiceBusConnectionStringClientProvider : ServiceBusClientProvider { - private readonly string _connectionString; + protected override ServiceBusClient Client { get; } + protected override ServiceBusAdministrationClient AdminClient { get; } /// /// Initializes an implementation is using a connection string. @@ -24,24 +25,8 @@ public ServiceBusConnectionStringClientProvider(string connectionString) "Configuration is null, ensure this is set in the constructor."); } - _connectionString = connectionString; - } - - /// - /// Provides an Azure Service Bus Client - /// - /// Azure Service Bus Client - public ServiceBusClient GetServiceBusClient() - { - return new ServiceBusClient(_connectionString); - } - /// - /// Provides an Azure Service Bus Administration Client - /// - /// Azure Service Bus Administration Client - public ServiceBusAdministrationClient GetServiceBusAdministrationClient() - { - return new ServiceBusAdministrationClient(_connectionString); + Client = new ServiceBusClient(connectionString); + AdminClient = new ServiceBusAdministrationClient(connectionString); } } } diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusDefaultAzureClientProvider.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusDefaultAzureClientProvider.cs index 517d46e561..159a31627e 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusDefaultAzureClientProvider.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusDefaultAzureClientProvider.cs @@ -8,9 +8,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider /// /// Provides Azure Service Bus Clients using Default Azure Credentials. /// - public class ServiceBusDefaultAzureClientProvider : IServiceBusClientProvider + public class ServiceBusDefaultAzureClientProvider : ServiceBusClientProvider { - private readonly string _fullyQualifiedNameSpace; + protected override ServiceBusClient Client { get; } + protected override ServiceBusAdministrationClient AdminClient { get; } /// /// Initializes an implementation is using Default Azure Credentials for Authentication. @@ -25,25 +26,9 @@ public ServiceBusDefaultAzureClientProvider(string fullyQualifiedNameSpace) "Fully qualified Namespace is null or empty, ensure this is set in the constructor."); } - _fullyQualifiedNameSpace = fullyQualifiedNameSpace; - } - - /// - /// Provides an Azure Service Bus Client - /// - /// Azure Service Bus Client - public ServiceBusClient GetServiceBusClient() - { - return new ServiceBusClient(_fullyQualifiedNameSpace, new DefaultAzureCredential()); - } - - /// - /// Provides an Azure Service Bus Administration Client - /// - /// Azure Service Bus Administration Client - public ServiceBusAdministrationClient GetServiceBusAdministrationClient() - { - return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, new DefaultAzureCredential()); + Client = new ServiceBusClient(fullyQualifiedNameSpace, new DefaultAzureCredential()); + AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace, + new DefaultAzureCredential()); } } } diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusManagedIdentityClientProvider.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusManagedIdentityClientProvider.cs index 4c82e0c104..a0b06c0a9f 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusManagedIdentityClientProvider.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusManagedIdentityClientProvider.cs @@ -8,9 +8,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider /// /// Provides Azure Service Bus Clients using Managed Identity Credentials. /// - public class ServiceBusManagedIdentityClientProvider : IServiceBusClientProvider + public class ServiceBusManagedIdentityClientProvider : ServiceBusClientProvider { - private readonly string _fullyQualifiedNameSpace; + protected override ServiceBusClient Client { get; } + protected override ServiceBusAdministrationClient AdminClient { get; } /// /// Initializes an implementation is using Managed Identity for Authentication. @@ -24,26 +25,10 @@ public ServiceBusManagedIdentityClientProvider(string fullyQualifiedNameSpace) throw new ArgumentNullException(nameof(fullyQualifiedNameSpace), "Fully qualified Namespace is null or empty, ensure this is set in the constructor."); } - - _fullyQualifiedNameSpace = fullyQualifiedNameSpace; - } - - /// - /// Provides an Azure Service Bus Client - /// - /// Azure Service Bus Client - public ServiceBusClient GetServiceBusClient() - { - return new ServiceBusClient(_fullyQualifiedNameSpace, new ManagedIdentityCredential()); - } - - /// - /// Provides an Azure Service Bus Administration Client - /// - /// Azure Service Bus Administration Client - public ServiceBusAdministrationClient GetServiceBusAdministrationClient() - { - return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, new ManagedIdentityCredential()); + + Client = new ServiceBusClient(fullyQualifiedNameSpace, new ManagedIdentityCredential()); + AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace, + new ManagedIdentityCredential()); } } } diff --git a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusVisualStudioCredentialClientProvider.cs b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusVisualStudioCredentialClientProvider.cs index 1018233cd1..21790632c9 100644 --- a/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusVisualStudioCredentialClientProvider.cs +++ b/src/Paramore.Brighter.MessagingGateway.AzureServiceBus/ClientProvider/ServiceBusVisualStudioCredentialClientProvider.cs @@ -8,9 +8,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider /// /// Provides Azure Service Bus Clients using Visual Studio Credentials. /// - public class ServiceBusVisualStudioCredentialClientProvider: IServiceBusClientProvider + public class ServiceBusVisualStudioCredentialClientProvider: ServiceBusClientProvider { - private readonly string _fullyQualifiedNameSpace; + protected override ServiceBusClient Client { get; } + protected override ServiceBusAdministrationClient AdminClient { get; } /// /// Initializes an implementation is using Visual Studio Credentials for Authentication. @@ -25,25 +26,9 @@ public ServiceBusVisualStudioCredentialClientProvider(string fullyQualifiedNameS "Fully qualified Namespace is null or empty, ensure this is set in the constructor."); } - _fullyQualifiedNameSpace = fullyQualifiedNameSpace; - } - - /// - /// Provides an Azure Service Bus Client - /// - /// Azure Service Bus Client - public ServiceBusClient GetServiceBusClient() - { - return new ServiceBusClient(_fullyQualifiedNameSpace, new VisualStudioCredential()); - } - - /// - /// Provides an Azure Service Bus Administration Client - /// - /// Azure Service Bus Administration Client - public ServiceBusAdministrationClient GetServiceBusAdministrationClient() - { - return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, new VisualStudioCredential()); + Client = new ServiceBusClient(fullyQualifiedNameSpace, new VisualStudioCredential()); + AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace, + new VisualStudioCredential()); } } } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs index f04635136a..dc523631f3 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs @@ -10,7 +10,7 @@ public class AzureServiceBusChannelFactoryTests [Fact] public void When_the_timeout_is_below_400_ms_it_should_throw_an_exception() { - var factory = new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(new AzureServiceBusConfiguration("someString"))); + var factory = new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(new AzureServiceBusConfiguration("Endpoint=sb://namespacename.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=yZOy10HAJTNkyaKOqwjSricOEud7QLK7R62KyVfjCt4="))); var subscription = new AzureServiceBusSubscription(typeof(object), new SubscriptionName("name"), new ChannelName("name"), new RoutingKey("name"), 1, 1, timeoutInMilliseconds: 399);