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);
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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}";
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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());
        }
Beispiel #7
0
        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);
        }