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

Commit 9ec4fb8

Browse files
author
Anton Vorontsov
committed
Added QueueingServiceAlreadyConfiguredException.
1 parent 9b817bf commit 9ec4fb8

File tree

3 files changed

+52
-10
lines changed

3 files changed

+52
-10
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
3+
namespace RabbitMQ.Client.Core.DependencyInjection.Exceptions
4+
{
5+
/// <summary>
6+
/// An exception that is thrown when queueing service of the same type configured twice.
7+
/// </summary>
8+
public class QueueingServiceAlreadyConfiguredException : Exception
9+
{
10+
/// <summary>
11+
/// Type of a queueing service.
12+
/// </summary>
13+
public Type QueueingServiceType { get; }
14+
15+
public QueueingServiceAlreadyConfiguredException(Type type, string message) : base(message)
16+
{
17+
QueueingServiceType = type;
18+
}
19+
}
20+
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -326,11 +326,11 @@ void StartClient()
326326
.Distinct()
327327
.ToList();
328328

329-
StartChannel(Channel, deadLetterExchanges);
330-
StartChannel(ConsumingChannel, deadLetterExchanges);
329+
StartChannel(Channel, _exchanges, deadLetterExchanges);
330+
StartChannel(ConsumingChannel, _exchanges, deadLetterExchanges);
331331
}
332332

333-
void StartChannel(IModel channel, IEnumerable<string> deadLetterExchanges)
333+
static void StartChannel(IModel channel, IEnumerable<RabbitMqExchange> exchanges, IEnumerable<string> deadLetterExchanges)
334334
{
335335
if (channel is null)
336336
{
@@ -342,13 +342,13 @@ void StartChannel(IModel channel, IEnumerable<string> deadLetterExchanges)
342342
StartDeadLetterExchange(channel, exchangeName);
343343
}
344344

345-
foreach (var exchange in _exchanges)
345+
foreach (var exchange in exchanges)
346346
{
347347
StartExchange(channel, exchange);
348348
}
349349
}
350350

351-
void StartDeadLetterExchange(IModel channel, string exchangeName)
351+
static void StartDeadLetterExchange(IModel channel, string exchangeName)
352352
{
353353
channel.ExchangeDeclare(
354354
exchange: exchangeName,
@@ -358,7 +358,7 @@ void StartDeadLetterExchange(IModel channel, string exchangeName)
358358
arguments: null);
359359
}
360360

361-
void StartExchange(IModel channel, RabbitMqExchange exchange)
361+
static void StartExchange(IModel channel, RabbitMqExchange exchange)
362362
{
363363
channel.ExchangeDeclare(
364364
exchange: exchange.Name,
@@ -373,7 +373,7 @@ void StartExchange(IModel channel, RabbitMqExchange exchange)
373373
}
374374
}
375375

376-
void StartQueue(IModel channel, RabbitMqQueueOptions queue, string exchangeName)
376+
static void StartQueue(IModel channel, RabbitMqQueueOptions queue, string exchangeName)
377377
{
378378
channel.QueueDeclare(queue: queue.Name,
379379
durable: queue.Durable,

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

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using System;
2+
using System.Linq;
23
using Microsoft.Extensions.Configuration;
34
using Microsoft.Extensions.DependencyInjection;
45
using Microsoft.Extensions.DependencyInjection.Extensions;
56
using Microsoft.Extensions.Logging;
67
using RabbitMQ.Client.Core.DependencyInjection.Configuration;
8+
using RabbitMQ.Client.Core.DependencyInjection.Exceptions;
79
using RabbitMQ.Client.Core.DependencyInjection.Models;
810

911
namespace RabbitMQ.Client.Core.DependencyInjection
@@ -24,6 +26,7 @@ public static class RabbitMqClientDependencyInjectionExtensions
2426
/// <returns>Service collection.</returns>
2527
public static IServiceCollection AddRabbitMqClient(this IServiceCollection services, IConfiguration configuration)
2628
{
29+
services.CheckIfQueueingServiceAlreadyConfigured<IQueueService>();
2730
services.AddRabbitMqClientInfrastructure();
2831
var configurationInstance = GetRabbitMqClientOptionsInstance(configuration);
2932
var guid = Guid.NewGuid();
@@ -43,6 +46,7 @@ public static IServiceCollection AddRabbitMqClient(this IServiceCollection servi
4346
/// <returns>Service collection.</returns>
4447
public static IServiceCollection AddRabbitMqClient(this IServiceCollection services, RabbitMqClientOptions configuration)
4548
{
49+
services.CheckIfQueueingServiceAlreadyConfigured<IQueueService>();
4650
services.AddRabbitMqClientInfrastructure();
4751
var guid = Guid.NewGuid();
4852
services.ConfigureRabbitMqConnectionOptions(guid, configuration);
@@ -61,6 +65,7 @@ public static IServiceCollection AddRabbitMqClient(this IServiceCollection servi
6165
/// <returns>Service collection.</returns>
6266
public static IServiceCollection AddRabbitMqClientTransient(this IServiceCollection services, IConfiguration configuration)
6367
{
68+
services.CheckIfQueueingServiceAlreadyConfigured<IQueueService>();
6469
services.AddRabbitMqClientInfrastructure();
6570
var configurationInstance = GetRabbitMqClientOptionsInstance(configuration);
6671
var guid = Guid.NewGuid();
@@ -80,6 +85,7 @@ public static IServiceCollection AddRabbitMqClientTransient(this IServiceCollect
8085
/// <returns>Service collection.</returns>
8186
public static IServiceCollection AddRabbitMqClientTransient(this IServiceCollection services, RabbitMqClientOptions configuration)
8287
{
88+
services.CheckIfQueueingServiceAlreadyConfigured<IQueueService>();
8389
services.AddRabbitMqClientInfrastructure();
8490
var guid = Guid.NewGuid();
8591
services.ConfigureRabbitMqConnectionOptions(guid, configuration);
@@ -95,6 +101,7 @@ public static IServiceCollection AddRabbitMqClientTransient(this IServiceCollect
95101
/// <returns>Service collection.</returns>
96102
public static IServiceCollection AddRabbitMqProducingClientSingleton(this IServiceCollection services, IConfiguration configuration)
97103
{
104+
services.CheckIfQueueingServiceAlreadyConfigured<IProducingService>();
98105
services.AddRabbitMqClientInfrastructure();
99106
var configurationInstance = GetRabbitMqClientOptionsInstance(configuration);
100107
var guid = Guid.NewGuid();
@@ -111,6 +118,7 @@ public static IServiceCollection AddRabbitMqProducingClientSingleton(this IServi
111118
/// <returns>Service collection.</returns>
112119
public static IServiceCollection AddRabbitMqProducingClientSingleton(this IServiceCollection services, RabbitMqClientOptions configuration)
113120
{
121+
services.CheckIfQueueingServiceAlreadyConfigured<IProducingService>();
114122
services.AddRabbitMqClientInfrastructure();
115123
var guid = Guid.NewGuid();
116124
services.ConfigureRabbitMqProducingClientOptions(guid, configuration);
@@ -126,6 +134,7 @@ public static IServiceCollection AddRabbitMqProducingClientSingleton(this IServi
126134
/// <returns>Service collection.</returns>
127135
public static IServiceCollection AddRabbitMqProducingClientTransient(this IServiceCollection services, IConfiguration configuration)
128136
{
137+
services.CheckIfQueueingServiceAlreadyConfigured<IProducingService>();
129138
services.AddRabbitMqClientInfrastructure();
130139
var configurationInstance = GetRabbitMqClientOptionsInstance(configuration);
131140
var guid = Guid.NewGuid();
@@ -142,6 +151,7 @@ public static IServiceCollection AddRabbitMqProducingClientTransient(this IServi
142151
/// <returns>Service collection.</returns>
143152
public static IServiceCollection AddRabbitMqProducingClientTransient(this IServiceCollection services, RabbitMqClientOptions configuration)
144153
{
154+
services.CheckIfQueueingServiceAlreadyConfigured<IProducingService>();
145155
services.AddRabbitMqClientInfrastructure();
146156
var guid = Guid.NewGuid();
147157
services.ConfigureRabbitMqProducingClientOptions(guid, configuration);
@@ -157,6 +167,7 @@ public static IServiceCollection AddRabbitMqProducingClientTransient(this IServi
157167
/// <returns>Service collection.</returns>
158168
public static IServiceCollection AddRabbitMqConsumingClientSingleton(this IServiceCollection services, IConfiguration configuration)
159169
{
170+
services.CheckIfQueueingServiceAlreadyConfigured<IConsumingService>();
160171
services.AddRabbitMqClientInfrastructure();
161172
var configurationInstance = GetRabbitMqClientOptionsInstance(configuration);
162173
var guid = Guid.NewGuid();
@@ -173,6 +184,7 @@ public static IServiceCollection AddRabbitMqConsumingClientSingleton(this IServi
173184
/// <returns>Service collection.</returns>
174185
public static IServiceCollection AddRabbitMqConsumingClientSingleton(this IServiceCollection services, RabbitMqClientOptions configuration)
175186
{
187+
services.CheckIfQueueingServiceAlreadyConfigured<IConsumingService>();
176188
services.AddRabbitMqClientInfrastructure();
177189
var guid = Guid.NewGuid();
178190
services.ConfigureRabbitMqConsumingClientOptions(guid, configuration);
@@ -188,6 +200,7 @@ public static IServiceCollection AddRabbitMqConsumingClientSingleton(this IServi
188200
/// <returns>Service collection.</returns>
189201
public static IServiceCollection AddRabbitMqConsumingClientTransient(this IServiceCollection services, IConfiguration configuration)
190202
{
203+
services.CheckIfQueueingServiceAlreadyConfigured<IConsumingService>();
191204
services.AddRabbitMqClientInfrastructure();
192205
var configurationInstance = GetRabbitMqClientOptionsInstance(configuration);
193206
var guid = Guid.NewGuid();
@@ -204,6 +217,7 @@ public static IServiceCollection AddRabbitMqConsumingClientTransient(this IServi
204217
/// <returns>Service collection.</returns>
205218
public static IServiceCollection AddRabbitMqConsumingClientTransient(this IServiceCollection services, RabbitMqClientOptions configuration)
206219
{
220+
services.CheckIfQueueingServiceAlreadyConfigured<IConsumingService>();
207221
services.AddRabbitMqClientInfrastructure();
208222
var guid = Guid.NewGuid();
209223
services.ConfigureRabbitMqConsumingClientOptions(guid, configuration);
@@ -229,7 +243,6 @@ static RabbitMqClientOptions GetRabbitMqClientOptionsInstance(IConfiguration con
229243

230244
static IServiceCollection ConfigureRabbitMqProducingClientOptions(this IServiceCollection services, Guid guid, RabbitMqClientOptions options)
231245
{
232-
// TODO: Check if it already exists .
233246
var container = new RabbitMqConnectionOptionsContainer
234247
{
235248
Guid = guid,
@@ -240,7 +253,6 @@ static IServiceCollection ConfigureRabbitMqProducingClientOptions(this IServiceC
240253

241254
static IServiceCollection ConfigureRabbitMqConsumingClientOptions(this IServiceCollection services, Guid guid, RabbitMqClientOptions options)
242255
{
243-
// TODO: Check if it already exists .
244256
var container = new RabbitMqConnectionOptionsContainer
245257
{
246258
Guid = guid,
@@ -251,7 +263,6 @@ static IServiceCollection ConfigureRabbitMqConsumingClientOptions(this IServiceC
251263

252264
static IServiceCollection ConfigureRabbitMqConnectionOptions(this IServiceCollection services, Guid guid, RabbitMqClientOptions options)
253265
{
254-
// TODO: Check if it already exists .
255266
var container = new RabbitMqConnectionOptionsContainer
256267
{
257268
Guid = guid,
@@ -336,5 +347,16 @@ static IServiceCollection ResolveTransientConsumingService(this IServiceCollecti
336347
provider.GetService<ILogger<QueueService> >()));
337348
return services;
338349
}
350+
351+
static IServiceCollection CheckIfQueueingServiceAlreadyConfigured<T>(this IServiceCollection services)
352+
{
353+
var descriptor = services.FirstOrDefault(x => x.ServiceType == typeof(T));
354+
if (descriptor != null)
355+
{
356+
throw new QueueingServiceAlreadyConfiguredException(typeof(T), $"A queueing service of type {typeof(T)} has been already configured.");
357+
}
358+
359+
return services;
360+
}
339361
}
340362
}

0 commit comments

Comments
 (0)