コード例 #1
0
 /// <summary>
 /// Initializes a new <see cref="MetricsController"/>
 /// </summary>
 /// <param name="metricsCollector">The data sink from which metrics can be sampled</param>
 public MetricsController(HttpMetricsCollector metricsCollector)
 {
     _metricsCollector = metricsCollector;
 }
        /// <summary>
        /// Adds Platibus services to the specified service collection
        /// </summary>
        /// <param name="services">The service collection to which the Platibus services will
        /// be added</param>
        public static void AddPlatibus(this IServiceCollection services)
        {
            services.AddSingleton <AspNetCoreLoggingSink>();

            services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().DiagnosticService);
            services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().MessageQueueingService);
            services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().SubscriptionTrackingService);
            services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().MessageJournal);
            services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().AuthorizationService);

            services.AddSingleton(serviceProvider =>
            {
                var diagnosticsService = serviceProvider.GetService <IDiagnosticService>();

                var metricsCollector = new HttpMetricsCollector();
                diagnosticsService.AddSink(metricsCollector);
                return(metricsCollector);
            });

            services.AddSingleton <ITransportService>(serviceProvider =>
            {
                var configuration               = serviceProvider.GetService <IAspNetCoreConfiguration>();
                var diagnosticsService          = serviceProvider.GetService <IDiagnosticService>();
                var messageQueueingService      = serviceProvider.GetService <IMessageQueueingService>();
                var subscriptionTrackingService = serviceProvider.GetService <ISubscriptionTrackingService>();
                var messageJournal              = serviceProvider.GetService <IMessageJournal>();

                var transportServiceOptions = new HttpTransportServiceOptions(configuration.BaseUri, messageQueueingService, subscriptionTrackingService)
                {
                    DiagnosticService = diagnosticsService,
                    Endpoints         = configuration.Endpoints,
                    MessageJournal    = messageJournal,
                    HttpClientFactory = configuration.HttpClientFactory,
                    BypassTransportLocalDestination = configuration.BypassTransportLocalDestination
                };
                var transportService = new HttpTransportService(transportServiceOptions);
                transportService.Init().WaitOnCompletionSource();
                return(transportService);
            });

            services.AddSingleton <IHttpResourceRouter>(serviceProvider =>
            {
                var configuration               = serviceProvider.GetService <IAspNetCoreConfiguration>();
                var transportService            = serviceProvider.GetService <ITransportService>();
                var subscriptionTrackingService = serviceProvider.GetService <ISubscriptionTrackingService>();
                var messageJournal              = serviceProvider.GetService <IMessageJournal>();
                var metricsCollector            = serviceProvider.GetService <HttpMetricsCollector>();
                var authorizationService        = serviceProvider.GetService <IAuthorizationService>();

                return(new ResourceTypeDictionaryRouter(configuration.BaseUri)
                {
                    { "message", new MessageController(transportService.ReceiveMessage, authorizationService) },
                    { "topic", new TopicController(subscriptionTrackingService, configuration.Topics, authorizationService) },
                    { "journal", new JournalController(messageJournal, authorizationService) },
                    { "metrics", new MetricsController(metricsCollector) }
                });
            });

            services.AddSingleton <IBus>(serviceProvider =>
            {
                var configuration          = serviceProvider.GetService <IAspNetCoreConfiguration>();
                var transportService       = serviceProvider.GetService <ITransportService>();
                var messageQueueingService = serviceProvider.GetService <IMessageQueueingService>();

                var bus = new Bus(configuration, configuration.BaseUri, transportService, messageQueueingService);
                bus.Init().WaitOnCompletionSource();
                return(bus);
            });
        }