Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure that we dont recreate Service Bus clients on every get #3195

Merged
merged 2 commits into from
Jul 10, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,6 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.AzureServiceBusWrap
/// </summary>
public interface IServiceBusSenderWrapper
{
/// <summary>
/// Send a Message
/// </summary>
/// <param name="message">The message to send.</param>
void Send(ServiceBusMessage message);

/// <summary>
/// Schedule a message to be sent.
/// </summary>
/// <param name="message">Message to be scheduled.</param>
/// <param name="scheduleEnqueueTime">The time to scheduled the message.</param>
void ScheduleMessage(ServiceBusMessage message, DateTimeOffset scheduleEnqueueTime);

/// <summary>
/// Close the Connection.
/// </summary>
void Close();

/// <summary>
/// Send a Message
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

/// <summary>
/// Initializes an implementation is <see cref="IServiceBusClientProvider"/> using Default Azure Credentials for Authentication.
Expand All @@ -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;
}

/// <summary>
/// Provides an Azure Service Bus Client
/// </summary>
/// <returns>Azure Service Bus Client</returns>
public ServiceBusClient GetServiceBusClient()
{
return new ServiceBusClient(_fullyQualifiedNameSpace, _tokenCredential);
}

/// <summary>
/// Provides an Azure Service Bus Administration Client
/// </summary>
/// <returns>Azure Service Bus Administration Client</returns>
public ServiceBusAdministrationClient GetServiceBusAdministrationClient()
{
return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, _tokenCredential);
Client = new ServiceBusClient(fullyQualifiedNameSpace, new ChainedTokenCredential(credentialSources));
AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace,
new ChainedTokenCredential(credentialSources));
}
}
}
Original file line number Diff line number Diff line change
@@ -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; }

/// <summary>
/// Provides an Azure Service Bus Client
/// </summary>
/// <returns>Azure Service Bus Client</returns>
public ServiceBusClient GetServiceBusClient() => Client;

/// <summary>
/// Provides an Azure Service Bus Administration Client
/// </summary>
/// <returns>Azure Service Bus Administration Client</returns>
public ServiceBusAdministrationClient GetServiceBusAdministrationClient() => AdminClient;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider
/// <summary>
/// Provides Azure Service Bus Clients using a Connection String.
/// </summary>
public class ServiceBusConnectionStringClientProvider : IServiceBusClientProvider
public class ServiceBusConnectionStringClientProvider : ServiceBusClientProvider
{
private readonly string _connectionString;
protected override ServiceBusClient Client { get; }
protected override ServiceBusAdministrationClient AdminClient { get; }

/// <summary>
/// Initializes an implementation is <see cref="IServiceBusClientProvider"/> using a connection string.
Expand All @@ -24,24 +25,8 @@ public ServiceBusConnectionStringClientProvider(string connectionString)
"Configuration is null, ensure this is set in the constructor.");
}

_connectionString = connectionString;
}

/// <summary>
/// Provides an Azure Service Bus Client
/// </summary>
/// <returns>Azure Service Bus Client</returns>
public ServiceBusClient GetServiceBusClient()
{
return new ServiceBusClient(_connectionString);
}
/// <summary>
/// Provides an Azure Service Bus Administration Client
/// </summary>
/// <returns>Azure Service Bus Administration Client</returns>
public ServiceBusAdministrationClient GetServiceBusAdministrationClient()
{
return new ServiceBusAdministrationClient(_connectionString);
Client = new ServiceBusClient(connectionString);
AdminClient = new ServiceBusAdministrationClient(connectionString);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider
/// <summary>
/// Provides Azure Service Bus Clients using Default Azure Credentials.
/// </summary>
public class ServiceBusDefaultAzureClientProvider : IServiceBusClientProvider
public class ServiceBusDefaultAzureClientProvider : ServiceBusClientProvider
{
private readonly string _fullyQualifiedNameSpace;
protected override ServiceBusClient Client { get; }
protected override ServiceBusAdministrationClient AdminClient { get; }

/// <summary>
/// Initializes an implementation is <see cref="IServiceBusClientProvider"/> using Default Azure Credentials for Authentication.
Expand All @@ -25,25 +26,9 @@ public ServiceBusDefaultAzureClientProvider(string fullyQualifiedNameSpace)
"Fully qualified Namespace is null or empty, ensure this is set in the constructor.");
}

_fullyQualifiedNameSpace = fullyQualifiedNameSpace;
}

/// <summary>
/// Provides an Azure Service Bus Client
/// </summary>
/// <returns>Azure Service Bus Client</returns>
public ServiceBusClient GetServiceBusClient()
{
return new ServiceBusClient(_fullyQualifiedNameSpace, new DefaultAzureCredential());
}

/// <summary>
/// Provides an Azure Service Bus Administration Client
/// </summary>
/// <returns>Azure Service Bus Administration Client</returns>
public ServiceBusAdministrationClient GetServiceBusAdministrationClient()
{
return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, new DefaultAzureCredential());
Client = new ServiceBusClient(fullyQualifiedNameSpace, new DefaultAzureCredential());
AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace,
new DefaultAzureCredential());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider
/// <summary>
/// Provides Azure Service Bus Clients using Managed Identity Credentials.
/// </summary>
public class ServiceBusManagedIdentityClientProvider : IServiceBusClientProvider
public class ServiceBusManagedIdentityClientProvider : ServiceBusClientProvider
{
private readonly string _fullyQualifiedNameSpace;
protected override ServiceBusClient Client { get; }
protected override ServiceBusAdministrationClient AdminClient { get; }

/// <summary>
/// Initializes an implementation is <see cref="IServiceBusClientProvider"/> using Managed Identity for Authentication.
Expand All @@ -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;
}

/// <summary>
/// Provides an Azure Service Bus Client
/// </summary>
/// <returns>Azure Service Bus Client</returns>
public ServiceBusClient GetServiceBusClient()
{
return new ServiceBusClient(_fullyQualifiedNameSpace, new ManagedIdentityCredential());
}

/// <summary>
/// Provides an Azure Service Bus Administration Client
/// </summary>
/// <returns>Azure Service Bus Administration Client</returns>
public ServiceBusAdministrationClient GetServiceBusAdministrationClient()
{
return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, new ManagedIdentityCredential());

Client = new ServiceBusClient(fullyQualifiedNameSpace, new ManagedIdentityCredential());
AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace,
new ManagedIdentityCredential());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ namespace Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider
/// <summary>
/// Provides Azure Service Bus Clients using Visual Studio Credentials.
/// </summary>
public class ServiceBusVisualStudioCredentialClientProvider: IServiceBusClientProvider
public class ServiceBusVisualStudioCredentialClientProvider: ServiceBusClientProvider
{
private readonly string _fullyQualifiedNameSpace;
protected override ServiceBusClient Client { get; }
protected override ServiceBusAdministrationClient AdminClient { get; }

/// <summary>
/// Initializes an implementation is <see cref="IServiceBusClientProvider"/> using Visual Studio Credentials for Authentication.
Expand All @@ -25,25 +26,9 @@ public ServiceBusVisualStudioCredentialClientProvider(string fullyQualifiedNameS
"Fully qualified Namespace is null or empty, ensure this is set in the constructor.");
}

_fullyQualifiedNameSpace = fullyQualifiedNameSpace;
}

/// <summary>
/// Provides an Azure Service Bus Client
/// </summary>
/// <returns>Azure Service Bus Client</returns>
public ServiceBusClient GetServiceBusClient()
{
return new ServiceBusClient(_fullyQualifiedNameSpace, new VisualStudioCredential());
}

/// <summary>
/// Provides an Azure Service Bus Administration Client
/// </summary>
/// <returns>Azure Service Bus Administration Client</returns>
public ServiceBusAdministrationClient GetServiceBusAdministrationClient()
{
return new ServiceBusAdministrationClient(_fullyQualifiedNameSpace, new VisualStudioCredential());
Client = new ServiceBusClient(fullyQualifiedNameSpace, new VisualStudioCredential());
AdminClient = new ServiceBusAdministrationClient(fullyQualifiedNameSpace,
new VisualStudioCredential());
}
}
}
Loading