[ci skip] Done with XML documentation for now
Made a few classes internal that were supposed to be
This commit is contained in:
parent
314a67db00
commit
fed377992b
@ -9,7 +9,7 @@ namespace Tapeti.DataAnnotations
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Validates consumed messages using System.ComponentModel.DataAnnotations
|
/// Validates consumed messages using System.ComponentModel.DataAnnotations
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DataAnnotationsMessageMiddleware : IMessageMiddleware
|
internal class DataAnnotationsMessageMiddleware : IMessageMiddleware
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public Task Handle(IMessageContext context, Func<Task> next)
|
public Task Handle(IMessageContext context, Func<Task> next)
|
||||||
|
@ -9,7 +9,7 @@ namespace Tapeti.DataAnnotations
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Validates published messages using System.ComponentModel.DataAnnotations
|
/// Validates published messages using System.ComponentModel.DataAnnotations
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DataAnnotationsPublishMiddleware : IPublishMiddleware
|
internal class DataAnnotationsPublishMiddleware : IPublishMiddleware
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public Task Handle(IPublishContext context, Func<Task> next)
|
public Task Handle(IPublishContext context, Func<Task> next)
|
||||||
|
@ -6,7 +6,11 @@ using Tapeti.Flow.FlowHelpers;
|
|||||||
|
|
||||||
namespace Tapeti.Flow.Default
|
namespace Tapeti.Flow.Default
|
||||||
{
|
{
|
||||||
public class FlowContinuationMiddleware : IControllerFilterMiddleware, IControllerMessageMiddleware, IControllerCleanupMiddleware
|
/// <inheritdoc cref="IControllerMessageMiddleware"/> />
|
||||||
|
/// <summary>
|
||||||
|
/// Handles methods marked with the Continuation attribute.
|
||||||
|
/// </summary>
|
||||||
|
internal class FlowContinuationMiddleware : IControllerFilterMiddleware, IControllerMessageMiddleware, IControllerCleanupMiddleware
|
||||||
{
|
{
|
||||||
public async Task Filter(IControllerMessageContext context, Func<Task> next)
|
public async Task Filter(IControllerMessageContext context, Func<Task> next)
|
||||||
{
|
{
|
||||||
|
@ -22,6 +22,7 @@ namespace Tapeti.Flow.Default
|
|||||||
private readonly IInternalPublisher publisher;
|
private readonly IInternalPublisher publisher;
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public FlowProvider(ITapetiConfig config, IPublisher publisher)
|
public FlowProvider(ITapetiConfig config, IPublisher publisher)
|
||||||
{
|
{
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
@ -3,16 +3,20 @@ using System.Linq.Expressions;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Tapeti.Config;
|
using Tapeti.Config;
|
||||||
using Tapeti.Default;
|
|
||||||
|
|
||||||
namespace Tapeti.Flow.Default
|
namespace Tapeti.Flow.Default
|
||||||
{
|
{
|
||||||
public class FlowStarter : IFlowStarter
|
/// <inheritdoc />
|
||||||
|
/// <summary>
|
||||||
|
/// Default implementation for IFlowStarter.
|
||||||
|
/// </summary>
|
||||||
|
internal class FlowStarter : IFlowStarter
|
||||||
{
|
{
|
||||||
private readonly ITapetiConfig config;
|
private readonly ITapetiConfig config;
|
||||||
private readonly ILogger logger;
|
private readonly ILogger logger;
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public FlowStarter(ITapetiConfig config, ILogger logger)
|
public FlowStarter(ITapetiConfig config, ILogger logger)
|
||||||
{
|
{
|
||||||
this.config = config;
|
this.config = config;
|
||||||
@ -20,22 +24,25 @@ namespace Tapeti.Flow.Default
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task Start<TController>(Expression<Func<TController, Func<IYieldPoint>>> methodSelector) where TController : class
|
public Task Start<TController>(Expression<Func<TController, Func<IYieldPoint>>> methodSelector) where TController : class
|
||||||
{
|
{
|
||||||
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => Task.FromResult((IYieldPoint)value), new object[] { });
|
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => Task.FromResult((IYieldPoint)value), new object[] { });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task Start<TController>(Expression<Func<TController, Func<Task<IYieldPoint>>>> methodSelector) where TController : class
|
public Task Start<TController>(Expression<Func<TController, Func<Task<IYieldPoint>>>> methodSelector) where TController : class
|
||||||
{
|
{
|
||||||
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => (Task<IYieldPoint>)value, new object[] {});
|
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => (Task<IYieldPoint>)value, new object[] {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task Start<TController, TParameter>(Expression<Func<TController, Func<TParameter, IYieldPoint>>> methodSelector, TParameter parameter) where TController : class
|
public Task Start<TController, TParameter>(Expression<Func<TController, Func<TParameter, IYieldPoint>>> methodSelector, TParameter parameter) where TController : class
|
||||||
{
|
{
|
||||||
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => Task.FromResult((IYieldPoint)value), new object[] {parameter});
|
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => Task.FromResult((IYieldPoint)value), new object[] {parameter});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task Start<TController, TParameter>(Expression<Func<TController, Func<TParameter, Task<IYieldPoint>>>> methodSelector, TParameter parameter) where TController : class
|
public Task Start<TController, TParameter>(Expression<Func<TController, Func<TParameter, Task<IYieldPoint>>>> methodSelector, TParameter parameter) where TController : class
|
||||||
{
|
{
|
||||||
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => (Task<IYieldPoint>)value, new object[] {parameter});
|
return CallControllerMethod<TController>(GetExpressionMethod(methodSelector), value => (Task<IYieldPoint>)value, new object[] {parameter});
|
||||||
|
@ -22,12 +22,15 @@ namespace Tapeti.Flow.Default
|
|||||||
private volatile bool inUse;
|
private volatile bool inUse;
|
||||||
private volatile bool loaded;
|
private volatile bool loaded;
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public FlowStore(IFlowRepository repository)
|
public FlowStore(IFlowRepository repository)
|
||||||
{
|
{
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public async Task Load()
|
public async Task Load()
|
||||||
{
|
{
|
||||||
if (inUse)
|
if (inUse)
|
||||||
@ -50,6 +53,7 @@ namespace Tapeti.Flow.Default
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task<Guid?> FindFlowID(Guid continuationID)
|
public Task<Guid?> FindFlowID(Guid continuationID)
|
||||||
{
|
{
|
||||||
if (!loaded)
|
if (!loaded)
|
||||||
@ -59,6 +63,7 @@ namespace Tapeti.Flow.Default
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public async Task<IFlowStateLock> LockFlowState(Guid flowID)
|
public async Task<IFlowStateLock> LockFlowState(Guid flowID)
|
||||||
{
|
{
|
||||||
if (!loaded)
|
if (!loaded)
|
||||||
@ -70,18 +75,20 @@ namespace Tapeti.Flow.Default
|
|||||||
return flowStatelock;
|
return flowStatelock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class FlowStateLock : IFlowStateLock
|
private class FlowStateLock : IFlowStateLock
|
||||||
{
|
{
|
||||||
private readonly FlowStore owner;
|
private readonly FlowStore owner;
|
||||||
private readonly Guid flowID;
|
|
||||||
private volatile IDisposable flowLock;
|
private volatile IDisposable flowLock;
|
||||||
private FlowState flowState;
|
private FlowState flowState;
|
||||||
|
|
||||||
|
public Guid FlowID { get; }
|
||||||
|
|
||||||
|
|
||||||
public FlowStateLock(FlowStore owner, Guid flowID, IDisposable flowLock)
|
public FlowStateLock(FlowStore owner, Guid flowID, IDisposable flowLock)
|
||||||
{
|
{
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
this.flowID = flowID;
|
this.FlowID = flowID;
|
||||||
this.flowLock = flowLock;
|
this.flowLock = flowLock;
|
||||||
|
|
||||||
owner.flowStates.TryGetValue(flowID, out flowState);
|
owner.flowStates.TryGetValue(flowID, out flowState);
|
||||||
@ -94,8 +101,6 @@ namespace Tapeti.Flow.Default
|
|||||||
l?.Dispose();
|
l?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Guid FlowID => flowID;
|
|
||||||
|
|
||||||
public Task<FlowState> GetFlowState()
|
public Task<FlowState> GetFlowState()
|
||||||
{
|
{
|
||||||
if (flowLock == null)
|
if (flowLock == null)
|
||||||
@ -121,22 +126,22 @@ namespace Tapeti.Flow.Default
|
|||||||
|
|
||||||
foreach (var addedContinuation in newFlowState.Continuations.Where(c => flowState == null || !flowState.Continuations.ContainsKey(c.Key)))
|
foreach (var addedContinuation in newFlowState.Continuations.Where(c => flowState == null || !flowState.Continuations.ContainsKey(c.Key)))
|
||||||
{
|
{
|
||||||
owner.continuationLookup.TryAdd(addedContinuation.Key, flowID);
|
owner.continuationLookup.TryAdd(addedContinuation.Key, FlowID);
|
||||||
}
|
}
|
||||||
|
|
||||||
var isNew = flowState == null;
|
var isNew = flowState == null;
|
||||||
flowState = newFlowState;
|
flowState = newFlowState;
|
||||||
owner.flowStates[flowID] = newFlowState;
|
owner.flowStates[FlowID] = newFlowState;
|
||||||
|
|
||||||
// Storing the flowstate in the underlying repository
|
// Storing the flowstate in the underlying repository
|
||||||
if (isNew)
|
if (isNew)
|
||||||
{
|
{
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
await owner.repository.CreateState(flowID, flowState, now);
|
await owner.repository.CreateState(FlowID, flowState, now);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await owner.repository.UpdateState(flowID, flowState);
|
await owner.repository.UpdateState(FlowID, flowState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,12 +155,12 @@ namespace Tapeti.Flow.Default
|
|||||||
foreach (var removedContinuation in flowState.Continuations.Keys)
|
foreach (var removedContinuation in flowState.Continuations.Keys)
|
||||||
owner.continuationLookup.TryRemove(removedContinuation, out _);
|
owner.continuationLookup.TryRemove(removedContinuation, out _);
|
||||||
|
|
||||||
owner.flowStates.TryRemove(flowID, out _);
|
owner.flowStates.TryRemove(FlowID, out _);
|
||||||
|
|
||||||
if (flowState != null)
|
if (flowState != null)
|
||||||
{
|
{
|
||||||
flowState = null;
|
flowState = null;
|
||||||
await owner.repository.DeleteState(flowID);
|
await owner.repository.DeleteState(FlowID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,9 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Tapeti.Flow.Default
|
namespace Tapeti.Flow.Default
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Default implementation for IFlowRepository. Does not persist any state, relying on the FlowStore's cache instead.
|
||||||
|
/// </summary>
|
||||||
public class NonPersistentFlowRepository : IFlowRepository
|
public class NonPersistentFlowRepository : IFlowRepository
|
||||||
{
|
{
|
||||||
Task<List<KeyValuePair<Guid, T>>> IFlowRepository.GetStates<T>()
|
Task<List<KeyValuePair<Guid, T>>> IFlowRepository.GetStates<T>()
|
||||||
@ -11,16 +14,19 @@ namespace Tapeti.Flow.Default
|
|||||||
return Task.FromResult(new List<KeyValuePair<Guid, T>>());
|
return Task.FromResult(new List<KeyValuePair<Guid, T>>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task CreateState<T>(Guid flowID, T state, DateTime timestamp)
|
public Task CreateState<T>(Guid flowID, T state, DateTime timestamp)
|
||||||
{
|
{
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task UpdateState<T>(Guid flowID, T state)
|
public Task UpdateState<T>(Guid flowID, T state)
|
||||||
{
|
{
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public Task DeleteState(Guid flowID)
|
public Task DeleteState(Guid flowID)
|
||||||
{
|
{
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
@ -4,19 +4,27 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Tapeti.Flow.FlowHelpers
|
namespace Tapeti.Flow.FlowHelpers
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Implementation of an asynchronous locking mechanism.
|
||||||
|
/// </summary>
|
||||||
public class LockCollection<T>
|
public class LockCollection<T>
|
||||||
{
|
{
|
||||||
private readonly Dictionary<T, LockItem> locks;
|
private readonly Dictionary<T, LockItem> locks;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public LockCollection(IEqualityComparer<T> comparer)
|
public LockCollection(IEqualityComparer<T> comparer)
|
||||||
{
|
{
|
||||||
locks = new Dictionary<T, LockItem>(comparer);
|
locks = new Dictionary<T, LockItem>(comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Waits for and acquires a lock on the specified key. Dispose the returned value to release the lock.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
public Task<IDisposable> GetLock(T key)
|
public Task<IDisposable> GetLock(T key)
|
||||||
{
|
{
|
||||||
// ReSharper disable once InconsistentlySynchronizedField - by design
|
// ReSharper disable once InconsistentlySynchronizedField - by design
|
||||||
LockItem nextLi = new LockItem(locks, key);
|
var nextLi = new LockItem(locks, key);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool continueImmediately = false;
|
bool continueImmediately = false;
|
||||||
@ -45,6 +53,7 @@ namespace Tapeti.Flow.FlowHelpers
|
|||||||
return nextLi.GetTask();
|
return nextLi.GetTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class LockItem : IDisposable
|
private class LockItem : IDisposable
|
||||||
{
|
{
|
||||||
internal volatile LockItem Next;
|
internal volatile LockItem Next;
|
||||||
@ -83,7 +92,7 @@ namespace Tapeti.Flow.FlowHelpers
|
|||||||
|
|
||||||
if (li != this)
|
if (li != this)
|
||||||
{
|
{
|
||||||
// Something is wrong (comparer is not stable?), but we cannot loose the completions sources
|
// Something is wrong (comparer is not stable?), but we cannot lose the completions sources
|
||||||
while (li.Next != null)
|
while (li.Next != null)
|
||||||
li = li.Next;
|
li = li.Next;
|
||||||
li.Next = Next;
|
li.Next = Next;
|
||||||
|
@ -2,8 +2,15 @@
|
|||||||
|
|
||||||
namespace Tapeti.Flow.FlowHelpers
|
namespace Tapeti.Flow.FlowHelpers
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a method into a unique string representation.
|
||||||
|
/// </summary>
|
||||||
public static class MethodSerializer
|
public static class MethodSerializer
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a method into a unique string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="method"></param>
|
||||||
public static string Serialize(MethodInfo method)
|
public static string Serialize(MethodInfo method)
|
||||||
{
|
{
|
||||||
return method.Name + '@' + method.DeclaringType?.Assembly.GetName().Name + ':' + method.DeclaringType?.FullName;
|
return method.Name + '@' + method.DeclaringType?.Assembly.GetName().Name + ':' + method.DeclaringType?.FullName;
|
||||||
|
@ -4,11 +4,39 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Tapeti.Flow
|
namespace Tapeti.Flow
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides persistency for flow states.
|
||||||
|
/// </summary>
|
||||||
public interface IFlowRepository
|
public interface IFlowRepository
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Load the previously persisted flow states.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A list of flow states, where the key is the unique Flow ID and the value is the deserialized T.</returns>
|
||||||
Task<List<KeyValuePair<Guid, T>>> GetStates<T>();
|
Task<List<KeyValuePair<Guid, T>>> GetStates<T>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stores a new flow state. Guaranteed to be run in a lock for the specified flow ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="flowID"></param>
|
||||||
|
/// <param name="state"></param>
|
||||||
|
/// <param name="timestamp"></param>
|
||||||
|
/// <returns></returns>
|
||||||
Task CreateState<T>(Guid flowID, T state, DateTime timestamp);
|
Task CreateState<T>(Guid flowID, T state, DateTime timestamp);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates an existing flow state. Guaranteed to be run in a lock for the specified flow ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="flowID"></param>
|
||||||
|
/// <param name="state"></param>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
Task UpdateState<T>(Guid flowID, T state);
|
Task UpdateState<T>(Guid flowID, T state);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete a flow state. Guaranteed to be run in a lock for the specified flow ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="flowID"></param>
|
||||||
Task DeleteState(Guid flowID);
|
Task DeleteState(Guid flowID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,13 @@
|
|||||||
|
|
||||||
namespace Tapeti.Flow
|
namespace Tapeti.Flow
|
||||||
{
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>
|
||||||
|
/// Raised when a response is expected to end a flow, but none was provided.
|
||||||
|
/// </summary>
|
||||||
public class ResponseExpectedException : Exception
|
public class ResponseExpectedException : Exception
|
||||||
{
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
public ResponseExpectedException(string message) : base(message) { }
|
public ResponseExpectedException(string message) : base(message) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,13 @@
|
|||||||
|
|
||||||
namespace Tapeti.Flow
|
namespace Tapeti.Flow
|
||||||
{
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>
|
||||||
|
/// Raised when an invalid yield point is returned.
|
||||||
|
/// </summary>
|
||||||
public class YieldPointException : Exception
|
public class YieldPointException : Exception
|
||||||
{
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
public YieldPointException(string message) : base(message) { }
|
public YieldPointException(string message) : base(message) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
<NoWarn>1701;1702;1591</NoWarn>
|
<NoWarn>1701;1702</NoWarn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -9,7 +9,7 @@ namespace Tapeti.Transient
|
|||||||
/// Implements a binding for transient request response messages.
|
/// Implements a binding for transient request response messages.
|
||||||
/// Register this binding using the WithTransient config extension method.
|
/// Register this binding using the WithTransient config extension method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TransientGenericBinding : IBinding
|
internal class TransientGenericBinding : IBinding
|
||||||
{
|
{
|
||||||
private readonly TransientRouter router;
|
private readonly TransientRouter router;
|
||||||
private readonly string dynamicQueuePrefix;
|
private readonly string dynamicQueuePrefix;
|
||||||
|
@ -6,7 +6,7 @@ namespace Tapeti.Transient
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default implementation of ITransientPublisher
|
/// Default implementation of ITransientPublisher
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TransientPublisher : ITransientPublisher
|
internal class TransientPublisher : ITransientPublisher
|
||||||
{
|
{
|
||||||
private readonly TransientRouter router;
|
private readonly TransientRouter router;
|
||||||
private readonly IPublisher publisher;
|
private readonly IPublisher publisher;
|
||||||
|
@ -10,7 +10,7 @@ namespace Tapeti.Transient
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Manages active requests and responses. For internal use.
|
/// Manages active requests and responses. For internal use.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TransientRouter
|
internal class TransientRouter
|
||||||
{
|
{
|
||||||
private readonly int defaultTimeoutMs;
|
private readonly int defaultTimeoutMs;
|
||||||
private readonly ConcurrentDictionary<Guid, TaskCompletionSource<object>> map = new ConcurrentDictionary<Guid, TaskCompletionSource<object>>();
|
private readonly ConcurrentDictionary<Guid, TaskCompletionSource<object>> map = new ConcurrentDictionary<Guid, TaskCompletionSource<object>>();
|
||||||
|
@ -9,7 +9,7 @@ namespace Tapeti.Connection
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Implements the bridge between the RabbitMQ Client consumer and a Tapeti Consumer
|
/// Implements the bridge between the RabbitMQ Client consumer and a Tapeti Consumer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TapetiBasicConsumer : DefaultBasicConsumer
|
internal class TapetiBasicConsumer : DefaultBasicConsumer
|
||||||
{
|
{
|
||||||
private readonly IConsumer consumer;
|
private readonly IConsumer consumer;
|
||||||
private readonly Func<ulong, ConsumeResult, Task> onRespond;
|
private readonly Func<ulong, ConsumeResult, Task> onRespond;
|
||||||
|
@ -9,7 +9,6 @@ using Newtonsoft.Json;
|
|||||||
using RabbitMQ.Client;
|
using RabbitMQ.Client;
|
||||||
using RabbitMQ.Client.Events;
|
using RabbitMQ.Client.Events;
|
||||||
using RabbitMQ.Client.Exceptions;
|
using RabbitMQ.Client.Exceptions;
|
||||||
using RabbitMQ.Client.Framing;
|
|
||||||
using Tapeti.Config;
|
using Tapeti.Config;
|
||||||
using Tapeti.Default;
|
using Tapeti.Default;
|
||||||
using Tapeti.Exceptions;
|
using Tapeti.Exceptions;
|
||||||
@ -21,7 +20,7 @@ namespace Tapeti.Connection
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Implementation of ITapetiClient for the RabbitMQ Client library
|
/// Implementation of ITapetiClient for the RabbitMQ Client library
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TapetiClient : ITapetiClient
|
internal class TapetiClient : ITapetiClient
|
||||||
{
|
{
|
||||||
private const int ReconnectDelay = 5000;
|
private const int ReconnectDelay = 5000;
|
||||||
private const int MandatoryReturnTimeout = 30000;
|
private const int MandatoryReturnTimeout = 30000;
|
||||||
|
@ -12,7 +12,7 @@ namespace Tapeti.Connection
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Implements a RabbitMQ consumer to pass messages to the Tapeti middleware.
|
/// Implements a RabbitMQ consumer to pass messages to the Tapeti middleware.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TapetiConsumer : IConsumer
|
internal class TapetiConsumer : IConsumer
|
||||||
{
|
{
|
||||||
private readonly ITapetiConfig config;
|
private readonly ITapetiConfig config;
|
||||||
private readonly string queueName;
|
private readonly string queueName;
|
||||||
|
@ -1,19 +1,15 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using RabbitMQ.Client;
|
|
||||||
using Tapeti.Annotations;
|
using Tapeti.Annotations;
|
||||||
using Tapeti.Config;
|
using Tapeti.Config;
|
||||||
using Tapeti.Default;
|
using Tapeti.Default;
|
||||||
using Tapeti.Exceptions;
|
|
||||||
using Tapeti.Helpers;
|
using Tapeti.Helpers;
|
||||||
|
|
||||||
namespace Tapeti.Connection
|
namespace Tapeti.Connection
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public class TapetiPublisher : IInternalPublisher
|
internal class TapetiPublisher : IInternalPublisher
|
||||||
{
|
{
|
||||||
private readonly ITapetiConfig config;
|
private readonly ITapetiConfig config;
|
||||||
private readonly Func<ITapetiClient> clientFactory;
|
private readonly Func<ITapetiClient> clientFactory;
|
||||||
|
@ -7,7 +7,7 @@ using Tapeti.Config;
|
|||||||
namespace Tapeti.Connection
|
namespace Tapeti.Connection
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public class TapetiSubscriber : ISubscriber
|
internal class TapetiSubscriber : ISubscriber
|
||||||
{
|
{
|
||||||
private readonly Func<ITapetiClient> clientFactory;
|
private readonly Func<ITapetiClient> clientFactory;
|
||||||
private readonly ITapetiConfig config;
|
private readonly ITapetiConfig config;
|
||||||
|
@ -6,11 +6,7 @@ using Tapeti.Config;
|
|||||||
|
|
||||||
namespace Tapeti.Default
|
namespace Tapeti.Default
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
internal class ControllerBindingContext : IControllerBindingContext
|
||||||
/// <summary>
|
|
||||||
/// Default implementation for IControllerBindingContext
|
|
||||||
/// </summary>
|
|
||||||
public class ControllerBindingContext : IControllerBindingContext
|
|
||||||
{
|
{
|
||||||
private BindingTargetMode? bindingTargetMode;
|
private BindingTargetMode? bindingTargetMode;
|
||||||
private readonly List<IControllerMiddlewareBase> middleware = new List<IControllerMiddlewareBase>();
|
private readonly List<IControllerMiddlewareBase> middleware = new List<IControllerMiddlewareBase>();
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
using System;
|
using Tapeti.Config;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Tapeti.Config;
|
|
||||||
|
|
||||||
namespace Tapeti.Default
|
namespace Tapeti.Default
|
||||||
{
|
{
|
||||||
/// <inheritdoc cref="IControllerMessageContext" />
|
internal class ControllerMessageContext : IControllerMessageContext
|
||||||
public class ControllerMessageContext : IControllerMessageContext
|
|
||||||
{
|
{
|
||||||
private readonly IMessageContext decoratedContext;
|
private readonly IMessageContext decoratedContext;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ namespace Tapeti.Default
|
|||||||
/// instead use the ITapetiConfigBuilder RegisterController / RegisterAllControllers extension
|
/// instead use the ITapetiConfigBuilder RegisterController / RegisterAllControllers extension
|
||||||
/// methods.
|
/// methods.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ControllerMethodBinding : IBinding
|
internal class ControllerMethodBinding : IBinding
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Contains all the required information to bind a controller method to a queue.
|
/// Contains all the required information to bind a controller method to a queue.
|
||||||
|
@ -3,11 +3,7 @@ using Tapeti.Config;
|
|||||||
|
|
||||||
namespace Tapeti.Default
|
namespace Tapeti.Default
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
internal class ExceptionStrategyContext : IExceptionStrategyContext
|
||||||
/// <summary>
|
|
||||||
/// Default implementation of IExceptionStrategyContext.
|
|
||||||
/// </summary>
|
|
||||||
public class ExceptionStrategyContext : IExceptionStrategyContext
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The ConsumeResult as set by the exception strategy. Defaults to Error.
|
/// The ConsumeResult as set by the exception strategy. Defaults to Error.
|
||||||
|
@ -4,8 +4,7 @@ using Tapeti.Config;
|
|||||||
|
|
||||||
namespace Tapeti.Default
|
namespace Tapeti.Default
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
internal class MessageContext : IMessageContext
|
||||||
public class MessageContext : IMessageContext
|
|
||||||
{
|
{
|
||||||
private readonly Dictionary<string, object> items = new Dictionary<string, object>();
|
private readonly Dictionary<string, object> items = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
@ -6,11 +6,7 @@ using Tapeti.Config;
|
|||||||
|
|
||||||
namespace Tapeti.Default
|
namespace Tapeti.Default
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
internal class RabbitMQMessageProperties : IMessageProperties
|
||||||
/// <summary>
|
|
||||||
/// Wrapper for RabbitMQ Client's IBasicProperties
|
|
||||||
/// </summary>
|
|
||||||
public class RabbitMQMessageProperties : IMessageProperties
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Provides access to the wrapped IBasicProperties
|
/// Provides access to the wrapped IBasicProperties
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
namespace Tapeti
|
namespace Tapeti
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base class for message controllers
|
/// Base class for message controllers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// Using this base class is not required, you can add the MessageController attribute
|
/// Using this base class is not required, you can add the MessageController attribute
|
||||||
|
Loading…
Reference in New Issue
Block a user