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();
        }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
 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);
     }
 }
Ejemplo n.º 4
0
        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)
 {
 }