“subscriptionDropped”事件是处理连接问题的好地方。事件商店项目中仍有一个未解决的问题。
https://github.com/EventStore/EventStore/issues/929
https://github.com/EventStore/EventStore/issues/1127
eventStoreConnection.SubscribeToAllFrom(lastCheckpoint, catchUpSubscriptionSettings,
eventAppeared(projection),
liveProcessingStarted(projection),subscriptionDropped(projection),userCredentials );
private Action<EventStoreCatchUpSubscription, SubscriptionDropReason, Exception> subscriptionDropped(Projection projection)
=> async (eventStoreCatchUpSubscription, subscriptionDropReason, exception) =>
{
eventStoreCatchUpSubscription.Stop();
switch (subscriptionDropReason)
{
case SubscriptionDropReason.UserInitiated:
Console.WriteLine($"{projection} projection stopped by user.");
break;
case SubscriptionDropReason.SubscribingError:
case SubscriptionDropReason.ServerError:
case SubscriptionDropReason.ConnectionClosed:
case SubscriptionDropReason.CatchUpError:
case SubscriptionDropReason.ProcessingQueueOverflow:
case SubscriptionDropReason.EventHandlerException:
Console.WriteLine($"{projection} projection stopped because of a transient error ({subscriptionDropReason}). ");
Console.WriteLine($"Exception Detail: {exception}");
Console.WriteLine("Attempting to restart...");
// Re-build your subscription in here
Task.Run(() => StartProjection(projection));
break;
default:
Console.WriteLine("Your subscription gg");
Console.WriteLine($"Exception Detail: {exception}");
break;
}
};