From 0898363cbfa4170486f9c5e49d38f7f4bed0ab28 Mon Sep 17 00:00:00 2001 From: espent1004 Date: Sun, 2 Feb 2020 18:01:13 +0100 Subject: [PATCH] Refactoring eventBusRabbitMQ implementation to make use of a dictionary to check whether an event belongs to the current handler --- .../EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs index d44abb9bd..85d8b1eb0 100644 --- a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs +++ b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs @@ -12,6 +12,7 @@ using RabbitMQ.Client; using RabbitMQ.Client.Events; using RabbitMQ.Client.Exceptions; using System; +using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Net; @@ -36,6 +37,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ private static readonly String tenantACustomisationUrl = @"http://tenantacustomisation/"; private static readonly String tenantManagerUrl = @"http://tenantmanager/"; private readonly int _retryCount; + private readonly Dictionary _tenantInfo; private IModel _consumerChannel; @@ -54,6 +56,9 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ _autofac = autofac; _retryCount = retryCount; _subsManager.OnEventRemoved += SubsManager_OnEventRemoved; + _tenantInfo = new Dictionary(); + _tenantInfo.Add(1, "TenantA"); + _tenantInfo.Add(2, "TenantB"); } private void SubsManager_OnEventRemoved(object sender, string eventName) @@ -377,14 +382,15 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ var concreteType = typeof(IIntegrationEventHandler<>).MakeGenericType(eventType); var handlerName = handler.ToString(); //Not tenant specific handler - if (!handlerName.Contains(("TenantA"))) + _tenantInfo.TryGetValue(evt.TenantId, out string tenantHandler); + if(String.IsNullOrEmpty(tenantHandler) || !handlerName.Contains(tenantHandler)) { await Task.Yield(); await (Task) concreteType.GetMethod("Handle") .Invoke(handler, new object[] {integrationEvent}); } //Tenant specific handler, and event belongs to that tenant - else if (handlerName.Contains("TenantA") && evt.TenantId == 1) + else if (!String.IsNullOrEmpty(tenantHandler) && handlerName.Contains(tenantHandler)) { await Task.Yield(); await (Task) concreteType.GetMethod("Handle")