diff --git a/src/LinkerConsoleApp/LinkerConsoleApp.csproj b/src/LinkerConsoleApp/LinkerConsoleApp.csproj
index 9ba7c13..35d4bf9 100644
--- a/src/LinkerConsoleApp/LinkerConsoleApp.csproj
+++ b/src/LinkerConsoleApp/LinkerConsoleApp.csproj
@@ -24,6 +24,9 @@
PreserveNewest
+
+ PreserveNewest
+
diff --git a/src/LinkerConsoleApp/LinkerSettings.cs b/src/LinkerConsoleApp/LinkerSettings.cs
index de85834..f8c81cf 100644
--- a/src/LinkerConsoleApp/LinkerSettings.cs
+++ b/src/LinkerConsoleApp/LinkerSettings.cs
@@ -1,5 +1,18 @@
-namespace LinkerConsoleApp
+using System.Collections.Generic;
+using Linker;
+
+namespace LinkerConsoleApp
{
+ public class LinkerSettings
+ {
+ public Link[] Links { get; set; }
+ }
+ public class Link
+ {
+ public Origin Origin { get; set; }
+ public Destination Destination { get; set; }
+ public IEnumerable Filters { get; set; }
+ }
public class Origin
{
public string ConnectionString { get; set; }
diff --git a/src/LinkerConsoleApp/Program.cs b/src/LinkerConsoleApp/Program.cs
index 1cb1610..84746f1 100644
--- a/src/LinkerConsoleApp/Program.cs
+++ b/src/LinkerConsoleApp/Program.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
using EventStore.ClientAPI;
using EventStore.ClientAPI.SystemData;
using Linker;
@@ -11,37 +13,51 @@ namespace LinkerConsoleApp
{
class Program
{
- private static Logger Log = LogManager.GetCurrentClassLogger();
+ private static readonly Logger Log = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
Log.Info("Building services...");
+ var config = BuildConfig();
+ var links = config.GetSection("links").Get>();
+ var services = new List();
+ foreach (var link in links)
+ {
+ var filters = link.Filters.Select(linkFilter => new Filter
+ {
+ FilterOperation = linkFilter.FilterOperation, FilterType = linkFilter.FilterType,
+ Value = linkFilter.Value
+ }).ToList();
+ var filterService = new FilterService(filters);
+ var service = new LinkerService(new LinkerConnectionBuilder(new Uri(link.Origin.ConnectionString),
+ ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Origin.User, link.Origin.Pass)),
+ link.Origin.ConnectionName), new LinkerConnectionBuilder(new Uri(link.Destination.ConnectionString),
+ ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Destination.User, link.Destination.Pass)),
+ link.Destination.ConnectionName), filterService, Settings.Default(), new NLogger());
+ services.Add(service);
+ }
+ StartServices(services);
+ Log.Info("Press enter to exit the program");
+ Console.ReadLine();
+ }
+
+ private static async Task StartServices(IEnumerable services)
+ {
+ foreach (var linkerService in services)
+ {
+ Log.Info($"Starting {linkerService.Name}");
+ await linkerService.Start();
+ }
+ }
- var env = Environment.GetEnvironmentVariable("CORE_ENVIRONMENT");
+ private static IConfigurationRoot BuildConfig()
+ {
+ var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
.AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: false)
.AddEnvironmentVariables();
- var config = builder.Build();
-
- var origin = config.GetSection("origin").Get();
- var destination = config.GetSection("destination").Get();
- var filterService = new FilterService(new List
- {
- new Filter { FilterOperation = FilterOperation.Exclude, FilterType = FilterType.Stream, Value = "diary-*" },
- new Filter { FilterOperation = FilterOperation.Include, FilterType = FilterType.Stream, Value = "*" }
- });
-
- var service = new LinkerService(new LinkerConnectionBuilder(new Uri(origin.ConnectionString),
- ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(origin.User, origin.Pass)),
- origin.ConnectionName), new LinkerConnectionBuilder(new Uri(destination.ConnectionString),
- ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(destination.User, destination.Pass)),
- destination.ConnectionName), filterService, Settings.Default(), new NLogger());
- service.Start().Wait();
-
- Log.Info("Replica Service started");
- Log.Info("Press enter to exit the program");
- Console.ReadLine();
+ return builder.Build();
}
}
}
diff --git a/src/LinkerConsoleApp/appsettings.json b/src/LinkerConsoleApp/appsettings.json
index babea9f..5999266 100644
--- a/src/LinkerConsoleApp/appsettings.json
+++ b/src/LinkerConsoleApp/appsettings.json
@@ -1,15 +1,25 @@
{
- "Environment": "local",
- "origin": {
- "connectionString": "tcp://localhost:1112",
- "user": "admin",
- "pass": "changeit",
- "connectionName": "origin-01"
- },
- "destination": {
- "connectionString": "tcp://localhost:2112",
- "user": "admin",
- "pass": "changeit",
- "connectionName": "destination-01"
- }
+ "links": [
+ {
+ "origin": {
+ "connectionString": "tcp://localhost:1112",
+ "user": "admin",
+ "pass": "changeit",
+ "connectionName": "origin-01"
+ },
+ "destination": {
+ "connectionString": "tcp://localhost:2112",
+ "user": "admin",
+ "pass": "changeit",
+ "connectionName": "destination-01"
+ },
+ "filters": [
+ {
+ "filterType": "stream",
+ "value": "diary-input",
+ "filterOperation": "exclude"
+ }
+ ]
+ }
+ ]
}
\ No newline at end of file