public LinkerService(ILinkerConnectionBuilder originBuilder, ILinkerConnectionBuilder destinationBuilder, IPositionRepository positionRepository, IFilterService filterService, Settings settings, ILinkerLogger logger) { Ensure.NotNull(originBuilder, nameof(originBuilder)); Ensure.NotNull(destinationBuilder, nameof(destinationBuilder)); Ensure.NotNull(positionRepository, nameof(positionRepository)); _logger = logger; Name = $"Replica From-{originBuilder.ConnectionName}-To-{destinationBuilder.ConnectionName}"; _connectionBuilderForOrigin = originBuilder; _connectionBuilderForDestination = destinationBuilder; _positionRepository = positionRepository; _filterService = filterService; _handleConflicts = settings.HandleConflicts; _resolveLinkTos = settings.ResolveLinkTos; _timerForStats = new Timer(settings.StatsInterval); _timerForStats.Elapsed += _timerForStats_Elapsed; _processor = new Timer(settings.SynchronisationInterval); _processor.Elapsed += Processor_Elapsed; _perfTunedSettings = new PerfTuneSettings(settings.MaxBufferSize, settings.MaxLiveQueue, settings.ReadBatchSize); _replicaHelper = new LinkerHelper(); }
private static Guid?ReadLastEventId(string stream, ILinkerConnectionBuilder destination) { using (var conn = destination.Build()) { conn.ConnectAsync().Wait(); var result = conn.ReadEventAsync(stream, StreamPosition.End, false).Result; return(result.Status == EventReadStatus.NoStream ? null : result.Event?.Event.EventId); } }
private static Guid AppendEvent(string body, string stream, string eventType, ILinkerConnectionBuilder senderConnectionBuilder) { using (var conn = senderConnectionBuilder.Build()) { conn.ConnectAsync().Wait(); var guid = Guid.NewGuid(); conn.AppendToStreamAsync(stream, ExpectedVersion.Any, new List <EventData> { new EventData(guid, eventType, true, Encoding.ASCII.GetBytes(body), null) }).Wait(); return(guid); } }
private static void TestReplicaForSampleEvent(ConnectionSettings connSettings, ILinkerConnectionBuilder connBuilder, string stream, string eventType) { var senderForTestEvents = new LinkerConnectionBuilder(new Uri("tcp://localhost:1112"), connSettings, "sender"); var guidOnOrigin = AppendEvent("{name:'for test...'}", stream, eventType, senderForTestEvents); Log.Info($"the id saved on the origin database is {guidOnOrigin}"); Thread.Sleep(3000); var guidOnDestination = ReadLastEventId(stream, connBuilder); if (guidOnDestination.Equals(guidOnOrigin)) { Log.Info($"the last replicated id on the destination database is {guidOnDestination}"); Log.Info("The test event has been replicated correctly!"); } else { Log.Error("The test event has not been replicated correctly"); } }
public LinkerService(ILinkerConnectionBuilder originBuilder, ILinkerConnectionBuilder destinationBuilder, IFilterService filterService, Settings settings) : this(originBuilder, destinationBuilder, new PositionRepository($"PositionStream-{destinationBuilder.ConnectionName}", "PositionUpdated", destinationBuilder.Build), filterService, settings, new SimpleConsoleLogger(nameof(LinkerService))) { }
public LinkerService(ILinkerConnectionBuilder originBuilder, ILinkerConnectionBuilder destinationBuilder, IPositionRepository positionRepository, IFilterService filterService, Settings settings) : this( originBuilder, destinationBuilder, positionRepository, filterService, settings, new SimpleConsoleLogger(nameof(LinkerService))) { }
public LinkerService(ILinkerConnectionBuilder originBuilder, ILinkerConnectionBuilder destinationBuilder, IFilterService filterService, Settings settings, ILinkerLogger logger) : this( originBuilder, destinationBuilder, new PositionRepository($"PositionStream-{destinationBuilder.ConnectionName}", "PositionUpdated", destinationBuilder.Build), filterService, settings, logger) { }