Beispiel #1
0
        public virtual async Task Start()
        {
            _sent      = new TestSendObserver(TestTimeout);
            _consumed  = new BusTestConsumeObserver(TestTimeout);
            _published = new BusTestPublishObserver(TestTimeout);

            PreCreateBus?.Invoke(this);

            _bus = CreateBus();

            ConnectObservers(_bus);

            _busHandle = await _bus.StartAsync().ConfigureAwait(false);

            BusSendEndpoint = await GetSendEndpoint(_bus.Address).ConfigureAwait(false);

            InputQueueSendEndpoint = await GetSendEndpoint(InputQueueAddress).ConfigureAwait(false);

            _inputQueueSendObserver = InputQueueSendEndpoint.ConnectSendObserver(_sent);

            _busConsumeObserver = _bus.ConnectConsumeObserver(_consumed);

            _busPublishObserver = _bus.ConnectPublishObserver(_published);

            _busSendObserver = _bus.ConnectSendObserver(_sent);
        }
 private void ConnectObservers()
 {
     _publishObserver = new LoggingPublishObserver(LogObserver);
     _sendObserver    = new LoggingSendObserver(LogObserver);
     _azureBus.ConnectPublishObserver(_publishObserver);
     _azureBus.ConnectSendObserver(_sendObserver);
 }
Beispiel #3
0
        /// <summary>
        ///     Connects the given ticket to all requests sent through the bus.
        /// </summary>
        /// <param name="busControl">The bus control.</param>
        /// <param name="ticket">The ticket.</param>
        public static void ConnectTicket(this IBusControl busControl, string ticket)
        {
            var propagator = new EncryptedTicketPropagator(ticket);

            busControl.ConnectSendObserver(propagator);
            busControl.ConnectPublishObserver(propagator);
        }
Beispiel #4
0
        /// <summary>
        ///     Connects the thread principal to all requests sent through the bus.
        /// </summary>
        /// <param name="busControl">The bus control.</param>
        public static void ConnectThreadPrincipal(this IBusControl busControl)
        {
            var propagator = new PrincipalTicketPropagator();

            busControl.ConnectSendObserver(propagator);
            busControl.ConnectPublishObserver(propagator);
        }
Beispiel #5
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("starting bus");

            _busControl.ConnectReceiveObserver(new LoggingReceiveObserver(_messageReceiveLogger));
            _busControl.ConnectPublishObserver(new LoggingPublishObserver(_publishingObserverLogger));
            return(_busControl.StartAsync(cancellationToken));
        }
Beispiel #6
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Bus host is being started...");

            await _busControl.StartAsync(cancellationToken);

            if (_config.EnableMessagesAudit)
            {
                _busControl.ConnectConsumeObserver(_consumingAuditObserver);
                _busControl.ConnectPublishObserver(_publishingAuditObserver);
                _busControl.ConnectSendObserver(_sendingAuditObserver);
            }

            _logger.LogInformation("Bus host has been started");
        }
Beispiel #7
0
 /// <summary>
 ///     Observing published messages
 /// </summary>
 /// <param name="publishObserver"></param>
 public void AddLog(IPublishObserver publishObserver)
 {
     _busControl.ConnectPublishObserver(publishObserver);
 }
        // Override and inject if you need a more custom startup configuration
        public virtual Task StartAsync(Type[] listenerNoQueueTypes = null)
        {
            if (_options.UseInMemoryBus)
            {
                throw new NotSupportedException("InMemory bus is not currently supported");
                // _busControl = Bus.Factory.CreateUsingInMemory(sbc =>
                // {
                //     if (_options.BusObserver != null)
                //     {
                //         sbc.AddBusFactorySpecification(_options.BusObserver);
                //     }

                //     sbc.UseRetry(Retry.Immediate(5));

                //     foreach (var handler in handlers)
                //     {
                //         sbc.ReceiveEndpoint(handler.MessageType.Name, c =>
                //         {
                //             c.LoadFrom(_services);
                //         });
                //     }
                // });
            }
            else
            {
                _busControl = Bus.Factory.CreateUsingRabbitMq(sbc =>
                {
                    var host = sbc.Host(new Uri(_options.RabbitMQUri), h =>
                    {
                        h.Username(_options.RabbitMQUsername);
                        h.Password(_options.RabbitMQPassword);
                    });

                    if (_options.BusObserver != null)
                    {
                        sbc.AddBusFactorySpecification(_options.BusObserver);
                    }

                    if (_options.RetryPolicy != null)
                    {
                        sbc.UseRetry(_options.RetryPolicy);
                    }

                    var allHandlers = _manager.GetAllHandlers().ToList();

                    foreach (var msgTypes in allHandlers
                             .Where(h => h.GenericType == typeof(IDistributedEventListener <>))
                             .GroupBy(h => h.ImplementationType))
                    {
                        sbc.ReceiveEndpoint(host, c =>
                        {
                            foreach (var handler in msgTypes)
                            {
                                ConsumerConfiguratorCache.Configure(handler, c, _services);
                            }
                        });
                    }

                    foreach (var msgTypes in allHandlers
                             .Where(h => h.GenericType == typeof(IEventListener <>) || h.GenericType == typeof(IFaultHandler <>))
                             .GroupBy(h => h.ImplementationType))
                    {
                        sbc.ReceiveEndpoint(host, msgTypes.Key.Name, c =>
                        {
                            foreach (var handler in msgTypes)
                            {
                                ConsumerConfiguratorCache.Configure(handler, c, _services);
                            }
                        });
                    }

                    foreach (var msgTypes in allHandlers
                             .Where(h => h.GenericType == typeof(ICommandHandler <,>) || h.GenericType == typeof(ICommandHandler <>))
                             .GroupBy(h => h.MessageType))
                    {
                        sbc.ReceiveEndpoint(host, msgTypes.Key.Name, c =>
                        {
                            foreach (var handler in msgTypes)
                            {
                                ConsumerConfiguratorCache.Configure(handler, c, _services);
                            }
                        });
                    }
                });
            }

            if (_options.ReceiveObserver != null)
            {
                _busControl.ConnectReceiveObserver(_options.ReceiveObserver);
            }

            if (_options.SendObserver != null)
            {
                _busControl.ConnectSendObserver(_options.SendObserver);
            }

            if (_options.ConsumeObserver != null)
            {
                _busControl.ConnectConsumeObserver(_options.ConsumeObserver);
            }

            if (_options.PublishObserver != null)
            {
                _busControl.ConnectPublishObserver(_options.PublishObserver);
            }

            return(_busControl.StartAsync());
        }
 public ConnectHandle ConnectPublishObserver(IPublishObserver observer)
 {
     return(_busControl.ConnectPublishObserver(observer));
 }
Beispiel #10
0
        public bool Start(HostControl hostControl)
        {
            Log.Information($"Service {Name} v.{Version} starting...");

            Log.Information($"Name: {Name}");
            Log.Information($"Title: {Title}");
            Log.Information($"Description: {Description}");
            Log.Information($"Version: {Version}");

            var builder = new ContainerBuilder();

            builder.Register(c => new GridFsStorage(
                                 Environment.ExpandEnvironmentVariables(ConfigurationManager.AppSettings["OsdrConnectionSettings:ConnectionString"]),
                                 ConfigurationManager.AppSettings["OsdrConnectionSettings:DatabaseName"]
                                 )).As <IBlobStorage>();

            builder.RegisterModule <Sds.Cvsp.Compounds.Autofac.PropertiesCalculationModule>();

            builder.RegisterConsumers(Assembly.GetExecutingAssembly());

            builder.Register(context =>
            {
                var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    var mtSettings = ConfigurationManager.AppSettings.MassTransitSettings();

                    var host = cfg.Host(new Uri(Environment.ExpandEnvironmentVariables(mtSettings.ConnectionString)), h => { });

                    cfg.RegisterConsumer <ChemicalPropertiesCommandHandler>(host, context, e =>
                    {
                        e.PrefetchCount = mtSettings.PrefetchCount;
                    });

                    cfg.UseConcurrencyLimit(mtSettings.ConcurrencyLimit);
                });

                return(busControl);
            })
            .SingleInstance()
            .As <IBusControl>()
            .As <IBus>();

            var container = builder.Build();

            ServiceLocator.SetLocatorProvider(() => new AutofacServiceLocator(container));

            BusControl = container.Resolve <IBusControl>();

            BusControl.ConnectPublishObserver(new PublishObserver());
            BusControl.ConnectConsumeObserver(new ConsumeObserver());

            BusControl.Start();

            if (int.TryParse(ConfigurationManager.AppSettings["HeartBeat:TcpPort"], out int port))
            {
                Heartbeat.TcpPortListener.Start(port);
            }

            Log.Information($"Service {Name} v.{Version} started");

            return(true);
        }