Refactoring eventBusRabbitMQ implementation to make use of a dictionary to check whether an event belongs to the current handler
This commit is contained in:
parent
4f2bb08d25
commit
0898363cbf
@ -12,6 +12,7 @@ using RabbitMQ.Client;
|
|||||||
using RabbitMQ.Client.Events;
|
using RabbitMQ.Client.Events;
|
||||||
using RabbitMQ.Client.Exceptions;
|
using RabbitMQ.Client.Exceptions;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
@ -36,6 +37,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ
|
|||||||
private static readonly String tenantACustomisationUrl = @"http://tenantacustomisation/";
|
private static readonly String tenantACustomisationUrl = @"http://tenantacustomisation/";
|
||||||
private static readonly String tenantManagerUrl = @"http://tenantmanager/";
|
private static readonly String tenantManagerUrl = @"http://tenantmanager/";
|
||||||
private readonly int _retryCount;
|
private readonly int _retryCount;
|
||||||
|
private readonly Dictionary<int, String> _tenantInfo;
|
||||||
|
|
||||||
|
|
||||||
private IModel _consumerChannel;
|
private IModel _consumerChannel;
|
||||||
@ -54,6 +56,9 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ
|
|||||||
_autofac = autofac;
|
_autofac = autofac;
|
||||||
_retryCount = retryCount;
|
_retryCount = retryCount;
|
||||||
_subsManager.OnEventRemoved += SubsManager_OnEventRemoved;
|
_subsManager.OnEventRemoved += SubsManager_OnEventRemoved;
|
||||||
|
_tenantInfo = new Dictionary<int, string>();
|
||||||
|
_tenantInfo.Add(1, "TenantA");
|
||||||
|
_tenantInfo.Add(2, "TenantB");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SubsManager_OnEventRemoved(object sender, string eventName)
|
private void SubsManager_OnEventRemoved(object sender, string eventName)
|
||||||
@ -377,14 +382,15 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ
|
|||||||
var concreteType = typeof(IIntegrationEventHandler<>).MakeGenericType(eventType);
|
var concreteType = typeof(IIntegrationEventHandler<>).MakeGenericType(eventType);
|
||||||
var handlerName = handler.ToString();
|
var handlerName = handler.ToString();
|
||||||
//Not tenant specific handler
|
//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.Yield();
|
||||||
await (Task) concreteType.GetMethod("Handle")
|
await (Task) concreteType.GetMethod("Handle")
|
||||||
.Invoke(handler, new object[] {integrationEvent});
|
.Invoke(handler, new object[] {integrationEvent});
|
||||||
}
|
}
|
||||||
//Tenant specific handler, and event belongs to that tenant
|
//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.Yield();
|
||||||
await (Task) concreteType.GetMethod("Handle")
|
await (Task) concreteType.GetMethod("Handle")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user