コード例 #1
0
        public static void ConfigureBus(ContainerBuilder builder, MonitoredServices monitoringName = MonitoredServices.NotMonitored, Action <IRabbitMqBusFactoryConfigurator, IComponentContext> registrationAction = null)
        {
            Log.Information("Configuring Bus uri={uri} user={user}", Settings.Default.RabbitMqUri, Settings.Default.RabbitMqUserName);

            // Configure Logging for Masstransit using Serilog
            MassTransit.Context.LogContext.ConfigureCurrentLogContext(new SerilogLoggerFactory(Log.Logger));

            builder.Register(ctx =>
            {
                return(MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    cfg.Host(new Uri(Settings.Default.RabbitMqUri), hst =>
                    {
                        hst.Username(Settings.Default.RabbitMqUserName);
                        hst.Password(Settings.Default.RabbitMqPassword);
                    });
                    if (monitoringName != MonitoredServices.NotMonitored)
                    {
                        cfg.ReceiveEndpoint(string.Format(BusConstants.MonitoringServiceHeartbeatRequestQueue, monitoringName.ToString()),
                                            ec => { ec.Consumer(() => new HeartbeatConsumer(monitoringName.ToString())); });
                    }


                    var context = ctx.Resolve <IComponentContext>();
                    registrationAction?.Invoke(cfg, context);
                }));
            })
            .SingleInstance()
            .As <IBusControl>()
            .As <IBus>()
            .ExternallyOwned();
        }
コード例 #2
0
        public void Start(MonitoredServices serviceCollection)
        {
            if (_processingThread != null && _processingThread.ThreadState == ThreadState.Running)
            {
                _log.Error("Cannot start, thread still running!");
                State = ServiceMonitorState.Doomed;
                return;
            }


            State = ServiceMonitorState.Starting;

            _services = new List <ServiceInfo>();

            foreach (var svc in serviceCollection)
            {
                var s = svc as MonitoredService;

                var installCmd = string.Empty;
                if (!string.IsNullOrEmpty(s.InstallCommandLine))
                {
                    installCmd = s.InstallCommandLine;
                }
                else if (!string.IsNullOrEmpty(s.ServiceExecutablePath))
                {
                    //topshelf service.  install with 'install' param.
                    installCmd = $"{s.ServiceExecutablePath} install -servicename:{s.ServiceName} --autostart";
                }


                _services.Add(new ServiceInfo
                {
                    ServiceName        = s.ServiceName,
                    InstallCommandLine = installCmd,
                    MonitorInterval    = s.CheckFrequencyValue,
                    NextCheck          = DateTime.Now.AddSeconds(s.CheckFrequencyValue)
                });
            }

            _processingThread = new Thread(new ThreadStart(MonitorServices));

            _processingThread.Start();
        }
コード例 #3
0
        public static IBusControl ConfigureBus(MonitoredServices monitoringName = MonitoredServices.NotMonitored,
                                               Action <IRabbitMqBusFactoryConfigurator, IRabbitMqHost> registrationAction = null)
        {
            Log.Information("Configuring Bus uri={uri} user={user}", Settings.Default.RabbitMqUri, Settings.Default.RabbitMqUserName);

            return(MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var host = cfg.Host(new Uri(Settings.Default.RabbitMqUri), hst =>
                {
                    hst.Username(Settings.Default.RabbitMqUserName);
                    hst.Password(Settings.Default.RabbitMqPassword);
                });
                if (monitoringName != MonitoredServices.NotMonitored)
                {
                    cfg.ReceiveEndpoint(host, string.Format(BusConstants.MonitoringServiceHeartbeatRequestQueue, monitoringName.ToString()),
                                        ec => { ec.Consumer(() => new HeartbeatConsumer(monitoringName.ToString())); });
                }

                registrationAction?.Invoke(cfg, host);
            }));
        }
コード例 #4
0
 public HeartbeatResponse(MonitoredServices type, HeartbeatStatus status)
 {
     Type   = type;
     Status = status;
 }
コード例 #5
0
 public MainService(MonitoredServices serviceCollection)
 {
     _serviceCollection = serviceCollection;
 }