Skip to content
This repository was archived by the owner on Apr 29, 2022. It is now read-only.

Commit 2426d86

Browse files
author
Anton Vorontsov
committed
Made a RabbitMqConnectionFactory service.
1 parent 1fdab17 commit 2426d86

File tree

9 files changed

+51
-13
lines changed

9 files changed

+51
-13
lines changed

examples/Examples.BatchMessageHandler/AnotherCustomBatchMessageHandler.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Threading.Tasks;
44
using Microsoft.Extensions.Logging;
55
using RabbitMQ.Client.Core.DependencyInjection.Models;
6+
using RabbitMQ.Client.Core.DependencyInjection.Services;
67

78
namespace Examples.BatchMessageHandler
89
{
@@ -11,9 +12,10 @@ public class AnotherCustomBatchMessageHandler : RabbitMQ.Client.Core.DependencyI
1112
readonly ILogger<AnotherCustomBatchMessageHandler> _logger;
1213

1314
public AnotherCustomBatchMessageHandler(
15+
IRabbitMqConnectionFactory rabbitMqConnectionFactory,
1416
IEnumerable<BatchConsumerConnectionOptions> batchConsumerConnectionOptions,
1517
ILogger<AnotherCustomBatchMessageHandler> logger)
16-
: base(batchConsumerConnectionOptions, logger)
18+
: base(rabbitMqConnectionFactory, batchConsumerConnectionOptions, logger)
1719
{
1820
_logger = logger;
1921
}

examples/Examples.BatchMessageHandler/CustomBatchMessageHandler.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Extensions.Logging;
77
using RabbitMQ.Client.Core.DependencyInjection.BatchMessageHandlers;
88
using RabbitMQ.Client.Core.DependencyInjection.Models;
9+
using RabbitMQ.Client.Core.DependencyInjection.Services;
910

1011
namespace Examples.BatchMessageHandler
1112
{
@@ -14,9 +15,10 @@ public class CustomBatchMessageHandler : BaseBatchMessageHandler
1415
readonly ILogger<CustomBatchMessageHandler> _logger;
1516

1617
public CustomBatchMessageHandler(
18+
IRabbitMqConnectionFactory rabbitMqConnectionFactory,
1719
IEnumerable<BatchConsumerConnectionOptions> batchConsumerConnectionOptions,
1820
ILogger<CustomBatchMessageHandler> logger)
19-
: base(batchConsumerConnectionOptions, logger)
21+
: base(rabbitMqConnectionFactory, batchConsumerConnectionOptions, logger)
2022
{
2123
_logger = logger;
2224
}

src/RabbitMQ.Client.Core.DependencyInjection/BatchMessageHandlers/BaseBatchMessageHandler.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
using Microsoft.Extensions.Logging;
99
using RabbitMQ.Client.Core.DependencyInjection.Configuration;
1010
using RabbitMQ.Client.Core.DependencyInjection.Exceptions;
11-
using RabbitMQ.Client.Core.DependencyInjection.InternalExtensions;
1211
using RabbitMQ.Client.Core.DependencyInjection.Models;
12+
using RabbitMQ.Client.Core.DependencyInjection.Services;
1313
using RabbitMQ.Client.Events;
1414

1515
namespace RabbitMQ.Client.Core.DependencyInjection.BatchMessageHandlers
@@ -44,10 +44,12 @@ public abstract class BaseBatchMessageHandler : IHostedService, IDisposable
4444
/// </summary>
4545
protected abstract ushort PrefetchCount { get; set; }
4646

47+
readonly IRabbitMqConnectionFactory _rabbitMqConnectionFactory;
4748
readonly RabbitMqClientOptions _clientOptions;
4849
readonly ILogger<BaseBatchMessageHandler> _logger;
4950

5051
protected BaseBatchMessageHandler(
52+
IRabbitMqConnectionFactory rabbitMqConnectionFactory,
5153
IEnumerable<BatchConsumerConnectionOptions> batchConsumerConnectionOptions,
5254
ILogger<BaseBatchMessageHandler> logger)
5355
{
@@ -58,14 +60,15 @@ protected BaseBatchMessageHandler(
5860
}
5961

6062
_clientOptions = optionsContainer.ClientOptions ?? throw new ArgumentNullException($"Consumer client options is null for {nameof(BaseBatchMessageHandler)}.", nameof(optionsContainer.ClientOptions));
63+
_rabbitMqConnectionFactory = rabbitMqConnectionFactory;
6164
_logger = logger;
6265
}
6366

6467
public Task StartAsync(CancellationToken cancellationToken)
6568
{
6669
ValidateProperties();
6770
_logger.LogInformation($"Batch message handler {GetType()} has been started.");
68-
Connection = RabbitMqFactoryExtensions.CreateRabbitMqConnection(_clientOptions);
71+
Connection = _rabbitMqConnectionFactory.CreateRabbitMqConnection(_clientOptions);
6972
Channel = Connection.CreateModel();
7073
Channel.BasicQos(PrefetchSize, PrefetchCount, false);
7174

src/RabbitMQ.Client.Core.DependencyInjection/BatchMessageHandlers/BatchMessageHandler.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading.Tasks;
77
using Microsoft.Extensions.Logging;
88
using RabbitMQ.Client.Core.DependencyInjection.Models;
9+
using RabbitMQ.Client.Core.DependencyInjection.Services;
910

1011
namespace RabbitMQ.Client.Core.DependencyInjection.BatchMessageHandlers
1112
{
@@ -15,9 +16,10 @@ namespace RabbitMQ.Client.Core.DependencyInjection.BatchMessageHandlers
1516
public abstract class BatchMessageHandler : BaseBatchMessageHandler
1617
{
1718
protected BatchMessageHandler(
19+
IRabbitMqConnectionFactory rabbitMqConnectionFactory,
1820
IEnumerable<BatchConsumerConnectionOptions> batchConsumerConnectionOptions,
1921
ILogger<BatchMessageHandler> logger)
20-
: base(batchConsumerConnectionOptions, logger)
22+
: base(rabbitMqConnectionFactory, batchConsumerConnectionOptions, logger)
2123
{
2224
}
2325

src/RabbitMQ.Client.Core.DependencyInjection/RabbitMqClientDependencyInjectionExtensions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ static IServiceCollection AddRabbitMqClientInfrastructure(this IServiceCollectio
231231
{
232232
services.AddOptions();
233233
services.AddLogging(options => options.AddConsole());
234+
services.TryAddSingleton<IRabbitMqConnectionFactory, RabbitMqConnectionFactory>();
234235
services.TryAddSingleton<IMessageHandlerContainerBuilder, MessageHandlerContainerBuilder>();
235236
services.TryAddSingleton<IMessageHandlingService, MessageHandlingService>();
236237
return services;
@@ -240,6 +241,7 @@ static IServiceCollection ResolveSingletonQueueService(this IServiceCollection s
240241
{
241242
services.TryAddSingleton<IQueueService>(provider => new QueueService(
242243
guid,
244+
provider.GetService<IRabbitMqConnectionFactory>(),
243245
provider.GetServices<RabbitMqConnectionOptionsContainer>(),
244246
provider.GetService<IMessageHandlingService>(),
245247
provider.GetServices<RabbitMqExchange>(),
@@ -251,6 +253,7 @@ static IServiceCollection ResolveTransientQueueService(this IServiceCollection s
251253
{
252254
services.TryAddTransient<IQueueService>(provider => new QueueService(
253255
guid,
256+
provider.GetService<IRabbitMqConnectionFactory>(),
254257
provider.GetServices<RabbitMqConnectionOptionsContainer>(),
255258
provider.GetService<IMessageHandlingService>(),
256259
provider.GetServices<RabbitMqExchange>(),
@@ -262,6 +265,7 @@ static IServiceCollection ResolveSingletonProducingService(this IServiceCollecti
262265
{
263266
services.TryAddSingleton<IProducingService>(provider => new QueueService(
264267
guid,
268+
provider.GetService<IRabbitMqConnectionFactory>(),
265269
provider.GetServices<RabbitMqConnectionOptionsContainer>(),
266270
provider.GetService<IMessageHandlingService>(),
267271
provider.GetServices<RabbitMqExchange>(),
@@ -273,6 +277,7 @@ static IServiceCollection ResolveTransientProducingService(this IServiceCollecti
273277
{
274278
services.TryAddTransient<IProducingService>(provider => new QueueService(
275279
guid,
280+
provider.GetService<IRabbitMqConnectionFactory>(),
276281
provider.GetServices<RabbitMqConnectionOptionsContainer>(),
277282
provider.GetService<IMessageHandlingService>(),
278283
provider.GetServices<RabbitMqExchange>(),
@@ -284,6 +289,7 @@ static IServiceCollection ResolveSingletonConsumingService(this IServiceCollecti
284289
{
285290
services.TryAddSingleton<IConsumingService>(provider => new QueueService(
286291
guid,
292+
provider.GetService<IRabbitMqConnectionFactory>(),
287293
provider.GetServices<RabbitMqConnectionOptionsContainer>(),
288294
provider.GetService<IMessageHandlingService>(),
289295
provider.GetServices<RabbitMqExchange>(),
@@ -295,6 +301,7 @@ static IServiceCollection ResolveTransientConsumingService(this IServiceCollecti
295301
{
296302
services.TryAddTransient<IConsumingService>(provider => new QueueService(
297303
guid,
304+
provider.GetService<IRabbitMqConnectionFactory>(),
298305
provider.GetServices<RabbitMqConnectionOptionsContainer>(),
299306
provider.GetService<IMessageHandlingService>(),
300307
provider.GetServices<RabbitMqExchange>(),
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using RabbitMQ.Client.Core.DependencyInjection.Configuration;
2+
3+
namespace RabbitMQ.Client.Core.DependencyInjection.Services
4+
{
5+
/// <summary>
6+
/// Interface of the service that is responsible for creating RabbitMQ connections depending on options <see cref="RabbitMqClientOptions"/>.
7+
/// </summary>
8+
public interface IRabbitMqConnectionFactory
9+
{
10+
/// <summary>
11+
/// Create a RabbitMQ connection.
12+
/// </summary>
13+
/// <param name="options">An instance of options <see cref="RabbitMqClientOptions"/>.</param>
14+
/// <returns>An instance of connection <see cref="IConnection"/>.</returns>
15+
/// <remarks>If options parameter is null the method return null too.</remarks>
16+
IConnection CreateRabbitMqConnection(RabbitMqClientOptions options);
17+
}
18+
}

src/RabbitMQ.Client.Core.DependencyInjection/Services/QueueService.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using Newtonsoft.Json;
99
using RabbitMQ.Client.Core.DependencyInjection.Configuration;
1010
using RabbitMQ.Client.Core.DependencyInjection.Exceptions;
11-
using RabbitMQ.Client.Core.DependencyInjection.InternalExtensions;
1211
using RabbitMQ.Client.Core.DependencyInjection.Models;
1312
using RabbitMQ.Client.Events;
1413

@@ -29,6 +28,7 @@ internal sealed class QueueService : IQueueService, IDisposable
2928

3029
AsyncEventingBasicConsumer _consumer;
3130

31+
readonly IRabbitMqConnectionFactory _rabbitMqConnectionFactory;
3232
readonly IMessageHandlingService _messageHandlingService;
3333
readonly IEnumerable<RabbitMqExchange> _exchanges;
3434
readonly ILogger<QueueService> _logger;
@@ -40,6 +40,7 @@ internal sealed class QueueService : IQueueService, IDisposable
4040

4141
public QueueService(
4242
Guid guid,
43+
IRabbitMqConnectionFactory rabbitMqConnectionFactory,
4344
IEnumerable<RabbitMqConnectionOptionsContainer> connectionOptionsContainers,
4445
IMessageHandlingService messageHandlingService,
4546
IEnumerable<RabbitMqExchange> exchanges,
@@ -51,6 +52,7 @@ public QueueService(
5152
throw new ArgumentException($"Connection options container for {nameof(QueueService)} with the guid {guid} is not found.", nameof(connectionOptionsContainers));
5253
}
5354

55+
_rabbitMqConnectionFactory = rabbitMqConnectionFactory;
5456
_messageHandlingService = messageHandlingService;
5557
_exchanges = exchanges;
5658
_logger = logger;
@@ -301,7 +303,7 @@ void HandleChannelCallbackException(object sender, CallbackExceptionEventArgs @e
301303

302304
void ConfigureConnectionInfrastructure(RabbitMqConnectionOptionsContainer optionsContainer)
303305
{
304-
Connection = RabbitMqFactoryExtensions.CreateRabbitMqConnection(optionsContainer?.Options?.ProducerOptions);
306+
Connection = _rabbitMqConnectionFactory.CreateRabbitMqConnection(optionsContainer?.Options?.ProducerOptions);
305307
if (Connection != null)
306308
{
307309
Connection.CallbackException += HandleConnectionCallbackException;
@@ -314,7 +316,7 @@ void ConfigureConnectionInfrastructure(RabbitMqConnectionOptionsContainer option
314316
Channel.BasicRecoverOk += HandleChannelBasicRecoverOk;
315317
}
316318

317-
ConsumingConnection = RabbitMqFactoryExtensions.CreateRabbitMqConnection(optionsContainer?.Options?.ConsumerOptions);
319+
ConsumingConnection = _rabbitMqConnectionFactory.CreateRabbitMqConnection(optionsContainer?.Options?.ConsumerOptions);
318320
if (ConsumingConnection != null)
319321
{
320322
ConsumingConnection.CallbackException += HandleConnectionCallbackException;

src/RabbitMQ.Client.Core.DependencyInjection/InternalExtensions/RabbitMqFactoryExtensions.cs renamed to src/RabbitMQ.Client.Core.DependencyInjection/Services/RabbitMqConnectionFactory.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
using System.Linq;
22
using RabbitMQ.Client.Core.DependencyInjection.Configuration;
33

4-
namespace RabbitMQ.Client.Core.DependencyInjection.InternalExtensions
4+
namespace RabbitMQ.Client.Core.DependencyInjection.Services
55
{
66
/// <summary>
7-
/// Extensions that contain business logic of creating RabbitMQ connections depending on options <see cref="RabbitMqClientOptions"/>.
7+
/// Service that is responsible for creating RabbitMQ connections depending on options <see cref="RabbitMqClientOptions"/>.
88
/// </summary>
9-
internal static class RabbitMqFactoryExtensions
9+
public class RabbitMqConnectionFactory : IRabbitMqConnectionFactory
1010
{
1111
/// <summary>
1212
/// Create a RabbitMQ connection.
1313
/// </summary>
1414
/// <param name="options">An instance of options <see cref="RabbitMqClientOptions"/>.</param>
1515
/// <returns>An instance of connection <see cref="IConnection"/>.</returns>
1616
/// <remarks>If options parameter is null the method return null too.</remarks>
17-
internal static IConnection CreateRabbitMqConnection(RabbitMqClientOptions options)
17+
public IConnection CreateRabbitMqConnection(RabbitMqClientOptions options)
1818
{
1919
if (options is null)
2020
{

tests/RabbitMQ.Client.Core.DependencyInjection.Tests/UnitTests/Stubs/StubBatchMessageHandler.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Extensions.Logging;
77
using RabbitMQ.Client.Core.DependencyInjection.BatchMessageHandlers;
88
using RabbitMQ.Client.Core.DependencyInjection.Models;
9+
using RabbitMQ.Client.Core.DependencyInjection.Services;
910

1011
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs
1112
{
@@ -14,9 +15,10 @@ public class StubBatchMessageHandler : BaseBatchMessageHandler
1415
readonly ILogger<StubBatchMessageHandler> _logger;
1516

1617
public StubBatchMessageHandler(
18+
IRabbitMqConnectionFactory rabbitMqConnectionFactory,
1719
IEnumerable<BatchConsumerConnectionOptions> batchConsumerConnectionOptions,
1820
ILogger<StubBatchMessageHandler> logger)
19-
: base(batchConsumerConnectionOptions, logger)
21+
: base(rabbitMqConnectionFactory, batchConsumerConnectionOptions, logger)
2022
{
2123
_logger = logger;
2224
}

0 commit comments

Comments
 (0)