RDB-136 Flow tabel wordt niet meer opgeruimd Bij een exceptie in Flow
Mogelijkheid voor het registreren van Cleanup middleware in Tapeti
This commit is contained in:
parent
3c44074289
commit
625c80e8f7
13
Tapeti/Config/ICleanupMiddleware.cs
Normal file
13
Tapeti/Config/ICleanupMiddleware.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Tapeti.Config
|
||||||
|
{
|
||||||
|
public interface ICleanupMiddleware
|
||||||
|
{
|
||||||
|
Task Handle(IMessageContext context, ConsumeResponse response);
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@ namespace Tapeti.Config
|
|||||||
{
|
{
|
||||||
IDependencyResolver DependencyResolver { get; }
|
IDependencyResolver DependencyResolver { get; }
|
||||||
IReadOnlyList<IMessageMiddleware> MessageMiddleware { get; }
|
IReadOnlyList<IMessageMiddleware> MessageMiddleware { get; }
|
||||||
|
IReadOnlyList<ICleanupMiddleware> CleanupMiddleware { get; }
|
||||||
IReadOnlyList<IPublishMiddleware> PublishMiddleware { get; }
|
IReadOnlyList<IPublishMiddleware> PublishMiddleware { get; }
|
||||||
IEnumerable<IQueue> Queues { get; }
|
IEnumerable<IQueue> Queues { get; }
|
||||||
|
|
||||||
|
@ -16,18 +16,20 @@ namespace Tapeti.Connection
|
|||||||
private readonly string queueName;
|
private readonly string queueName;
|
||||||
private readonly IDependencyResolver dependencyResolver;
|
private readonly IDependencyResolver dependencyResolver;
|
||||||
private readonly IReadOnlyList<IMessageMiddleware> messageMiddleware;
|
private readonly IReadOnlyList<IMessageMiddleware> messageMiddleware;
|
||||||
|
private readonly IReadOnlyList<ICleanupMiddleware> cleanupMiddleware;
|
||||||
private readonly List<IBinding> bindings;
|
private readonly List<IBinding> bindings;
|
||||||
|
|
||||||
private readonly ILogger logger;
|
private readonly ILogger logger;
|
||||||
private readonly IExceptionStrategy exceptionStrategy;
|
private readonly IExceptionStrategy exceptionStrategy;
|
||||||
|
|
||||||
|
|
||||||
public TapetiConsumer(TapetiWorker worker, string queueName, IDependencyResolver dependencyResolver, IEnumerable<IBinding> bindings, IReadOnlyList<IMessageMiddleware> messageMiddleware)
|
public TapetiConsumer(TapetiWorker worker, string queueName, IDependencyResolver dependencyResolver, IEnumerable<IBinding> bindings, IReadOnlyList<IMessageMiddleware> messageMiddleware, IReadOnlyList<ICleanupMiddleware> cleanupMiddleware)
|
||||||
{
|
{
|
||||||
this.worker = worker;
|
this.worker = worker;
|
||||||
this.queueName = queueName;
|
this.queueName = queueName;
|
||||||
this.dependencyResolver = dependencyResolver;
|
this.dependencyResolver = dependencyResolver;
|
||||||
this.messageMiddleware = messageMiddleware;
|
this.messageMiddleware = messageMiddleware;
|
||||||
|
this.cleanupMiddleware = cleanupMiddleware;
|
||||||
this.bindings = bindings.ToList();
|
this.bindings = bindings.ToList();
|
||||||
|
|
||||||
logger = dependencyResolver.Resolve<ILogger>();
|
logger = dependencyResolver.Resolve<ILogger>();
|
||||||
@ -74,8 +76,7 @@ namespace Tapeti.Connection
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Cleanup handlers
|
await RunCleanup(context, response);
|
||||||
//response = exceptionStrategy.HandleException(null, exception.SourceException);
|
|
||||||
}
|
}
|
||||||
catch (Exception eCleanup)
|
catch (Exception eCleanup)
|
||||||
{
|
{
|
||||||
@ -107,6 +108,21 @@ namespace Tapeti.Connection
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task RunCleanup(MessageContext context, ConsumeResponse response)
|
||||||
|
{
|
||||||
|
foreach(var handler in cleanupMiddleware)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await handler.Handle(context, response);
|
||||||
|
}
|
||||||
|
catch (Exception eCleanup)
|
||||||
|
{
|
||||||
|
logger.HandlerException(eCleanup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task DispatchMesage(MessageContext context, byte[] body)
|
private async Task DispatchMesage(MessageContext context, byte[] body)
|
||||||
{
|
{
|
||||||
var message = dependencyResolver.Resolve<IMessageSerializer>().Deserialize(body, context.Properties);
|
var message = dependencyResolver.Resolve<IMessageSerializer>().Deserialize(body, context.Properties);
|
||||||
|
@ -57,7 +57,7 @@ namespace Tapeti.Connection
|
|||||||
|
|
||||||
return taskQueue.Value.Add(async () =>
|
return taskQueue.Value.Add(async () =>
|
||||||
{
|
{
|
||||||
(await GetChannel()).BasicConsume(queueName, false, new TapetiConsumer(this, queueName, config.DependencyResolver, bindings, config.MessageMiddleware));
|
(await GetChannel()).BasicConsume(queueName, false, new TapetiConsumer(this, queueName, config.DependencyResolver, bindings, config.MessageMiddleware, config.CleanupMiddleware));
|
||||||
}).Unwrap();
|
}).Unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Config\ICleanupMiddleware.cs" />
|
||||||
<Compile Include="Config\IPublishContext.cs" />
|
<Compile Include="Config\IPublishContext.cs" />
|
||||||
<Compile Include="Config\IMessageFilterMiddleware.cs" />
|
<Compile Include="Config\IMessageFilterMiddleware.cs" />
|
||||||
<Compile Include="Config\IPublishMiddleware.cs" />
|
<Compile Include="Config\IPublishMiddleware.cs" />
|
||||||
|
@ -26,6 +26,7 @@ namespace Tapeti
|
|||||||
|
|
||||||
private readonly List<IBindingMiddleware> bindingMiddleware = new List<IBindingMiddleware>();
|
private readonly List<IBindingMiddleware> bindingMiddleware = new List<IBindingMiddleware>();
|
||||||
private readonly List<IMessageMiddleware> messageMiddleware = new List<IMessageMiddleware>();
|
private readonly List<IMessageMiddleware> messageMiddleware = new List<IMessageMiddleware>();
|
||||||
|
private readonly List<ICleanupMiddleware> cleanupMiddleware = new List<ICleanupMiddleware>();
|
||||||
private readonly List<IPublishMiddleware> publishMiddleware = new List<IPublishMiddleware>();
|
private readonly List<IPublishMiddleware> publishMiddleware = new List<IPublishMiddleware>();
|
||||||
|
|
||||||
private readonly IDependencyResolver dependencyResolver;
|
private readonly IDependencyResolver dependencyResolver;
|
||||||
@ -62,7 +63,7 @@ namespace Tapeti
|
|||||||
|
|
||||||
queues.AddRange(dynamicBindings.Select(bl => new Queue(new QueueInfo { Dynamic = true }, bl)));
|
queues.AddRange(dynamicBindings.Select(bl => new Queue(new QueueInfo { Dynamic = true }, bl)));
|
||||||
|
|
||||||
var config = new Config(dependencyResolver, messageMiddleware, publishMiddleware, queues);
|
var config = new Config(dependencyResolver, messageMiddleware, cleanupMiddleware, publishMiddleware, queues);
|
||||||
(dependencyResolver as IDependencyContainer)?.RegisterDefaultSingleton<IConfig>(config);
|
(dependencyResolver as IDependencyContainer)?.RegisterDefaultSingleton<IConfig>(config);
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
@ -83,6 +84,13 @@ namespace Tapeti
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public TapetiConfig Use(ICleanupMiddleware handler)
|
||||||
|
{
|
||||||
|
cleanupMiddleware.Add(handler);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public TapetiConfig Use(IPublishMiddleware handler)
|
public TapetiConfig Use(IPublishMiddleware handler)
|
||||||
{
|
{
|
||||||
publishMiddleware.Add(handler);
|
publishMiddleware.Add(handler);
|
||||||
@ -108,6 +116,8 @@ namespace Tapeti
|
|||||||
Use((IBindingMiddleware)middleware);
|
Use((IBindingMiddleware)middleware);
|
||||||
else if (middleware is IMessageMiddleware)
|
else if (middleware is IMessageMiddleware)
|
||||||
Use((IMessageMiddleware)middleware);
|
Use((IMessageMiddleware)middleware);
|
||||||
|
else if (middleware is ICleanupMiddleware)
|
||||||
|
Use((ICleanupMiddleware)middleware);
|
||||||
else if (middleware is IPublishMiddleware)
|
else if (middleware is IPublishMiddleware)
|
||||||
Use((IPublishMiddleware)middleware);
|
Use((IPublishMiddleware)middleware);
|
||||||
else
|
else
|
||||||
@ -345,16 +355,18 @@ namespace Tapeti
|
|||||||
{
|
{
|
||||||
public IDependencyResolver DependencyResolver { get; }
|
public IDependencyResolver DependencyResolver { get; }
|
||||||
public IReadOnlyList<IMessageMiddleware> MessageMiddleware { get; }
|
public IReadOnlyList<IMessageMiddleware> MessageMiddleware { get; }
|
||||||
|
public IReadOnlyList<ICleanupMiddleware> CleanupMiddleware { get; }
|
||||||
public IReadOnlyList<IPublishMiddleware> PublishMiddleware { get; }
|
public IReadOnlyList<IPublishMiddleware> PublishMiddleware { get; }
|
||||||
public IEnumerable<IQueue> Queues { get; }
|
public IEnumerable<IQueue> Queues { get; }
|
||||||
|
|
||||||
private readonly Dictionary<MethodInfo, IBinding> bindingMethodLookup;
|
private readonly Dictionary<MethodInfo, IBinding> bindingMethodLookup;
|
||||||
|
|
||||||
|
|
||||||
public Config(IDependencyResolver dependencyResolver, IReadOnlyList<IMessageMiddleware> messageMiddleware, IReadOnlyList<IPublishMiddleware> publishMiddleware, IEnumerable<IQueue> queues)
|
public Config(IDependencyResolver dependencyResolver, IReadOnlyList<IMessageMiddleware> messageMiddleware, IReadOnlyList<ICleanupMiddleware> cleanupMiddleware, IReadOnlyList<IPublishMiddleware> publishMiddleware, IEnumerable<IQueue> queues)
|
||||||
{
|
{
|
||||||
DependencyResolver = dependencyResolver;
|
DependencyResolver = dependencyResolver;
|
||||||
MessageMiddleware = messageMiddleware;
|
MessageMiddleware = messageMiddleware;
|
||||||
|
CleanupMiddleware = cleanupMiddleware;
|
||||||
PublishMiddleware = publishMiddleware;
|
PublishMiddleware = publishMiddleware;
|
||||||
Queues = queues.ToList();
|
Queues = queues.ToList();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user