public IEnumerable <NServiceBus.Address> GetSubscriberAddressesForMessage(IEnumerable <NServiceBus.Unicast.Subscriptions.MessageType> messageTypes) { var addresses = new List <Address>(); IEventSubscriptionRepository rep = new EventSubscriptionRepository(); var subs = rep.GetSubscriptionByTypes(messageTypes); //if there are subscribers with the same endpoint a random is done between them. var results = from s in subs group s by s.SubscriberEndpoint into g select new { Endpoint = g.Key, Subscriptions = g.ToList() }; foreach (var r in results) { if (r.Subscriptions.Count() > 1) { Random rnd = new Random(); int selected = rnd.Next(0, subs.Count()); addresses.Add(new Address(r.Subscriptions[selected].SubscriberEndpoint, r.Subscriptions[selected].SubscriberMachine)); } if (subs.Count() == 1) { addresses.Add(new Address(r.Subscriptions[0].SubscriberEndpoint, r.Subscriptions[0].SubscriberMachine)); } } return(addresses); }
private IPublisherClientService RegisterLocalPublisher(IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource, NotificationServiceSettings settings) { var eventChannelRepository = new EventChannelRepository(settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Channel, }, loggerFactory, diagnosticSource); var eventSubscriptionRepository = new EventSubscriptionRepository(eventChannelRepository, settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Subscription }, loggerFactory, diagnosticSource); var eventRepository = new EventRepository(eventChannelRepository, settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Events }, loggerFactory, diagnosticSource); return(new LocalPublisherClientService(eventChannelRepository, eventSubscriptionRepository, eventRepository, options, loggerFactory, diagnosticSource)); }
public EventLiveStreamerTest() { _loggerFactory = new LoggerFactory(); _loggerFactory.AddConsole(); var diagnosticSource = new MyDiagnosticSource(); _eventChannelRepository = new EventChannelRepository("ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName }, _loggerFactory, new MyDiagnosticSource()); _eventSubscriptionRepository = new EventSubscriptionRepository(_eventChannelRepository, "ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName }, _loggerFactory, new MyDiagnosticSource()); _eventMessageRepository = new EventRepository(_eventChannelRepository, "ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName }, _loggerFactory, new MyDiagnosticSource()); _eventLiveStreamer = new EventLiveStreamerService(_eventChannelRepository, _eventSubscriptionRepository, _eventMessageRepository, _loggerFactory, diagnosticSource); }
public PublisherClientServiceExtensionTest() { var loggerFactory = new LoggerFactory(); loggerFactory.AddConsole(); var services = new ServiceCollection(); var eventChannelRepository = new EventChannelRepository("ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\channel_{Guid.NewGuid()}.json").FullName }, loggerFactory, new MyDiagnosticSource()); services.AddSingleton(eventChannelRepository); var eventSubscriptionRepository = new EventSubscriptionRepository(eventChannelRepository, "ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\subscription_{Guid.NewGuid()}.json").FullName }, loggerFactory, new MyDiagnosticSource()); services.AddSingleton(eventSubscriptionRepository); var eventRepository = new EventRepository(eventChannelRepository, "ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\event_{Guid.NewGuid()}.json").FullName }, loggerFactory, new MyDiagnosticSource()); services.AddSingleton(eventRepository); var settings = Options.Create(new NotificationServiceSettings { ApplicationName = "MyApplication", ServiceName = "MyService", MaxLifeTimeSubscriber = 30, MaxLifeTimeMessage = 30, IsFifo = true, CallBackType = "ECommerce.Events.Clients.Tests,ECommerce.Events.Clients.Tests.MyCallBackTest" }); var publisherSetting = new RemoteServiceSettings { IsLocal = true }; services.AddPublisher(publisherSetting, settings, loggerFactory, new MyDiagnosticSource()); _serviceProvider = services.BuildServiceProvider(); _publisher = _serviceProvider.GetRequiredService <LocalPublisherClientService>(); _channelName = $"{settings.Value.ApplicationName}.{settings.Value.ServiceName}"; }
private static void RegisterLocalPublisher(IServiceCollection services, RemoteServiceSettings publisherSettings, IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource, NotificationServiceSettings settings, ServiceProvider serviceProvider) { var eventChannelRepository = serviceProvider.GetService <EventChannelRepository>(); if (eventChannelRepository == null) { eventChannelRepository = new EventChannelRepository(settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Channel, }, loggerFactory, diagnosticSource); services.AddSingleton(eventChannelRepository); } var eventSubscriptionRepository = serviceProvider.GetService <EventSubscriptionRepository>(); if (eventSubscriptionRepository == null) { eventSubscriptionRepository = new EventSubscriptionRepository(eventChannelRepository, settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Subscription }, loggerFactory, diagnosticSource); services.AddSingleton(eventSubscriptionRepository); } var eventRepository = serviceProvider.GetService <EventRepository>(); if (eventRepository == null) { eventRepository = new EventRepository(eventChannelRepository, settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Events }, loggerFactory, diagnosticSource); services.AddSingleton(eventRepository); } var publisher = new LocalPublisherClientService(eventChannelRepository, eventSubscriptionRepository, eventRepository, options, loggerFactory, diagnosticSource); services.AddSingleton <IPublisherClientService>(publisher); }
public SubscriberTest() { var loggerFactory = new LoggerFactory(); loggerFactory.AddConsole(); _eventChannelRepository = new EventChannelRepository("ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\channel_{Guid.NewGuid()}.json").FullName }, loggerFactory, new MyDiagnosticSource()); _eventSubscriptionRepository = new EventSubscriptionRepository(_eventChannelRepository, "ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\subscription_{Guid.NewGuid()}.json").FullName }, loggerFactory, new MyDiagnosticSource()); var eventRepository = new EventRepository(_eventChannelRepository, "ECommerce.Data.FileStore", new ConnectionOptions { Provider = "FileDb", ConnectionString = new FileInfo($"data\\event_{Guid.NewGuid()}.json").FullName }, loggerFactory, new MyDiagnosticSource()); _settings = Options.Create(new NotificationServiceSettings { ApplicationName = "MyApplication", ServiceName = "MyService", MaxLifeTimeSubscriber = 30, MaxLifeTimeMessage = 30, IsFifo = true, CallBackType = "ECommerce.Events.Clients.Tests,ECommerce.Events.Clients.Tests.MyCallBackTest" }); var subscriberSettings = new RemoteServiceSettings { IsLocal = true }; _subscriber = new SubscriberClientService(_eventChannelRepository, _eventSubscriptionRepository, eventRepository, _settings, loggerFactory, new MyDiagnosticSource()); }
private static void RegisterSubscriber(IServiceCollection services, RemoteServiceSettings remoteServiceSettings, IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource) { var settings = options.Value; if (!remoteServiceSettings.IsLocal) { return; } var serviceProvider = services.BuildServiceProvider(); var eventChannelRepository = serviceProvider.GetService <EventChannelRepository>(); if (eventChannelRepository == null) { eventChannelRepository = new EventChannelRepository(settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Channel, }, loggerFactory, diagnosticSource); services.AddSingleton(eventChannelRepository); } var eventSubscriptionRepository = serviceProvider.GetService <EventSubscriptionRepository>(); if (eventSubscriptionRepository == null) { eventSubscriptionRepository = new EventSubscriptionRepository(eventChannelRepository, settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Subscription }, loggerFactory, diagnosticSource); services.AddSingleton(eventSubscriptionRepository); } var eventRepository = serviceProvider.GetService <EventRepository>(); if (eventRepository == null) { eventRepository = new EventRepository(eventChannelRepository, settings.Repository.ProviderAssembly, new ConnectionOptions { Provider = settings.Repository.ProviderType, ConnectionString = settings.Repository.Events }, loggerFactory, diagnosticSource); services.AddSingleton(eventRepository); } var subscriber = new SubscriberClientService(eventChannelRepository, eventSubscriptionRepository, eventRepository, options, loggerFactory, diagnosticSource); services.AddSingleton(subscriber); services.AddSingleton <IHostedService>(subscriber); }