Skip to content

Commit 8046203

Browse files
committed
Fix Rabbitmq bug with multiple service instances
1 parent 1545eb8 commit 8046203

8 files changed

Lines changed: 35 additions & 20 deletions

File tree

src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@ public class EventBusRabbitMQ : IEventBus, IDisposable
3232
private string _queueName;
3333

3434
public EventBusRabbitMQ(IRabbitMQPersistentConnection persistentConnection, ILogger<EventBusRabbitMQ> logger,
35-
ILifetimeScope autofac, IEventBusSubscriptionsManager subsManager, int retryCount = 5)
35+
ILifetimeScope autofac, IEventBusSubscriptionsManager subsManager, string queueName = null, int retryCount = 5)
3636
{
3737
_persistentConnection = persistentConnection ?? throw new ArgumentNullException(nameof(persistentConnection));
3838
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
3939
_subsManager = subsManager ?? new InMemoryEventBusSubscriptionsManager();
40+
_queueName = queueName;
4041
_consumerChannel = CreateConsumerChannel();
4142
_autofac = autofac;
4243
_retryCount = retryCount;
@@ -170,7 +171,12 @@ private IModel CreateConsumerChannel()
170171
channel.ExchangeDeclare(exchange: BROKER_NAME,
171172
type: "direct");
172173

173-
_queueName = channel.QueueDeclare().QueueName;
174+
channel.QueueDeclare(queue: _queueName,
175+
durable: true,
176+
exclusive: false,
177+
autoDelete: false,
178+
arguments: null);
179+
174180

175181
var consumer = new EventingBasicConsumer(channel);
176182
consumer.Received += async (model, ea) =>

src/Services/Basket/Basket.API/Startup.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,15 +257,16 @@ protected virtual void ConfigureAuth(IApplicationBuilder app)
257257

258258
private void RegisterEventBus(IServiceCollection services)
259259
{
260+
var subscriptionClientName = Configuration["SubscriptionClientName"];
261+
260262
if (Configuration.GetValue<bool>("AzureServiceBusEnabled"))
261263
{
262264
services.AddSingleton<IEventBus, EventBusServiceBus>(sp =>
263265
{
264266
var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>();
265267
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
266268
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>();
267-
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
268-
var subscriptionClientName = Configuration["SubscriptionClientName"];
269+
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
269270

270271
return new EventBusServiceBus(serviceBusPersisterConnection, logger,
271272
eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
@@ -286,7 +287,7 @@ private void RegisterEventBus(IServiceCollection services)
286287
retryCount = int.Parse(Configuration["EventBusRetryCount"]);
287288
}
288289

289-
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount);
290+
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount);
290291
});
291292
}
292293

src/Services/Catalog/Catalog.API/Startup.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,8 @@ private void RegisterAppInsights(IServiceCollection services)
224224

225225
private void RegisterEventBus(IServiceCollection services)
226226
{
227+
var subscriptionClientName = Configuration["SubscriptionClientName"];
228+
227229
if (Configuration.GetValue<bool>("AzureServiceBusEnabled"))
228230
{
229231
services.AddSingleton<IEventBus, EventBusServiceBus>(sp =>
@@ -232,7 +234,6 @@ private void RegisterEventBus(IServiceCollection services)
232234
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
233235
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>();
234236
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
235-
var subscriptionClientName = Configuration["SubscriptionClientName"];
236237

237238
return new EventBusServiceBus(serviceBusPersisterConnection, logger,
238239
eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
@@ -254,7 +255,7 @@ private void RegisterEventBus(IServiceCollection services)
254255
retryCount = int.Parse(Configuration["EventBusRetryCount"]);
255256
}
256257

257-
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount);
258+
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount);
258259
});
259260
}
260261

src/Services/Location/Locations.API/Startup.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ protected virtual void ConfigureAuth(IApplicationBuilder app)
227227

228228
private void RegisterEventBus(IServiceCollection services)
229229
{
230+
var subscriptionClientName = Configuration["SubscriptionClientName"];
231+
230232
if (Configuration.GetValue<bool>("AzureServiceBusEnabled"))
231233
{
232234
services.AddSingleton<IEventBus, EventBusServiceBus>(sp =>
@@ -235,7 +237,6 @@ private void RegisterEventBus(IServiceCollection services)
235237
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
236238
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>();
237239
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
238-
var subscriptionClientName = Configuration["SubscriptionClientName"];
239240

240241
return new EventBusServiceBus(serviceBusPersisterConnection, logger,
241242
eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
@@ -256,7 +257,7 @@ private void RegisterEventBus(IServiceCollection services)
256257
retryCount = int.Parse(Configuration["EventBusRetryCount"]);
257258
}
258259

259-
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount);
260+
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount);
260261
});
261262
}
262263

src/Services/Marketing/Marketing.API/Startup.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,17 +246,18 @@ private void ConfigureAuthService(IServiceCollection services)
246246
});
247247
}
248248

249-
private void RegisterEventBus(IServiceCollection services)
249+
private void RegisterEventBus(IServiceCollection services)
250250
{
251+
var subscriptionClientName = Configuration["SubscriptionClientName"];
252+
251253
if (Configuration.GetValue<bool>("AzureServiceBusEnabled"))
252254
{
253255
services.AddSingleton<IEventBus, EventBusServiceBus>(sp =>
254256
{
255257
var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>();
256258
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
257259
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>();
258-
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
259-
var subscriptionClientName = Configuration["SubscriptionClientName"];
260+
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
260261

261262
return new EventBusServiceBus(serviceBusPersisterConnection, logger,
262263
eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
@@ -277,7 +278,7 @@ private void RegisterEventBus(IServiceCollection services)
277278
retryCount = int.Parse(Configuration["EventBusRetryCount"]);
278279
}
279280

280-
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount);
281+
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount);
281282
});
282283
}
283284

src/Services/Ordering/Ordering.API/Startup.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,15 +294,16 @@ protected virtual void ConfigureAuth(IApplicationBuilder app)
294294

295295
private void RegisterEventBus(IServiceCollection services)
296296
{
297+
var subscriptionClientName = Configuration["SubscriptionClientName"];
298+
297299
if (Configuration.GetValue<bool>("AzureServiceBusEnabled"))
298300
{
299301
services.AddSingleton<IEventBus, EventBusServiceBus>(sp =>
300302
{
301303
var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>();
302304
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
303305
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>();
304-
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
305-
var subscriptionClientName = Configuration["SubscriptionClientName"];
306+
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
306307

307308
return new EventBusServiceBus(serviceBusPersisterConnection, logger,
308309
eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
@@ -323,7 +324,7 @@ private void RegisterEventBus(IServiceCollection services)
323324
retryCount = int.Parse(Configuration["EventBusRetryCount"]);
324325
}
325326

326-
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount);
327+
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount);
327328
});
328329
}
329330

src/Services/Payment/Payment.API/Startup.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,16 @@ private void RegisterAppInsights(IServiceCollection services)
127127

128128
private void RegisterEventBus(IServiceCollection services)
129129
{
130+
var subscriptionClientName = Configuration["SubscriptionClientName"];
131+
130132
if (Configuration.GetValue<bool>("AzureServiceBusEnabled"))
131133
{
132134
services.AddSingleton<IEventBus, EventBusServiceBus>(sp =>
133135
{
134136
var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>();
135137
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>();
136138
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>();
137-
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
138-
var subscriptionClientName = Configuration["SubscriptionClientName"];
139+
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
139140

140141
return new EventBusServiceBus(serviceBusPersisterConnection, logger,
141142
eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
@@ -156,7 +157,7 @@ private void RegisterEventBus(IServiceCollection services)
156157
retryCount = int.Parse(Configuration["EventBusRetryCount"]);
157158
}
158159

159-
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount);
160+
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount);
160161
});
161162
}
162163

test/Services/LoadTest/OrderProducts.loadtest

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
<Scenarios>
44
<Scenario Name="OrderProductsLoadTest" DelayBetweenIterations="0" PercentNewUsers="0" IPSwitching="false" TestMixType="PercentageOfTestsStarted" ApplyDistributionToPacingDelay="true" MaxTestIterations="0" DisableDuringWarmup="false" DelayStartTime="0" AllowedAgents="">
55
<ThinkProfile Value="0.2" Pattern="NormalDistribution" />
6-
<LoadProfile Pattern="Step" InitialUsers="1" MaxUsers="50" StepUsers="2" StepDuration="10" StepRampTime="10" />
6+
<LoadProfile Pattern="Step" InitialUsers="1" MaxUsers="1000" StepUsers="50" StepDuration="10" StepRampTime="10" />
7+
<InitializeTest>
8+
<TestProfile Name="AddProducts" Path="webmvc\addproducts.webtest" Id="2c9d53ae-0237-47bd-a5d2-6500ef5d8fcb" Percentage="0.0" Type="Microsoft.VisualStudio.TestTools.WebStress.DeclarativeWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
9+
</InitializeTest>
710
<TestMix>
811
<TestProfile Name="GetItems" Path="catalog.api\getitems.webtest" Id="e527de7e-beff-4824-af52-dda763fd5e6c" Percentage="19" Type="Microsoft.VisualStudio.TestTools.WebStress.DeclarativeWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
912
<TestProfile Name="GetCatalogTypes" Path="catalog.api\getcatalogtypes.webtest" Id="7df20b29-d5c3-447b-b73d-95c63e9c4061" Percentage="15" Type="Microsoft.VisualStudio.TestTools.WebStress.DeclarativeWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

0 commit comments

Comments
 (0)