Exemple #1
0
        public async Task StartAsync(string configSectionName, Func <OwinConfiguration, Task> configure = null)
        {
            var serverPath      = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configSectionName);
            var serverDirectory = new DirectoryInfo(serverPath);

            serverDirectory.Refresh();
            if (serverDirectory.Exists)
            {
                serverDirectory.Delete(true);
            }

            var configuration        = new OwinConfiguration();
            var configurationManager = new OwinConfigurationManager();
            await configurationManager.Initialize(configuration, configSectionName);

#pragma warning disable 612
            await configurationManager.FindAndProcessConfigurationHooks(configuration);

#pragma warning restore 612

            if (configure != null)
            {
                await configure(configuration);
            }

            var baseUri = configuration.BaseUri;
            _subscriptionTrackingService = configuration.SubscriptionTrackingService;
            _messageQueueingService      = configuration.MessageQueueingService;

            var transportServiceOptions = new HttpTransportServiceOptions(baseUri, _messageQueueingService, _subscriptionTrackingService)
            {
                DiagnosticService = configuration.DiagnosticService,
                Endpoints         = configuration.Endpoints,
                MessageJournal    = configuration.MessageJournal,
                BypassTransportLocalDestination = configuration.BypassTransportLocalDestination
            };

            _transportService = new HttpTransportService(transportServiceOptions);

            var bus = new Bus(configuration, baseUri, _transportService, _messageQueueingService);
            _transportService.MessageReceived += (sender, args) => bus.HandleMessage(args.Message, args.Principal);

            await _transportService.Init();

            await bus.Init();

            Bus = bus;

            _middleware = new PlatibusMiddleware(configuration, bus, _transportService);
            _webapp     = WebApp.Start(baseUri.ToString(), app => app.UsePlatibusMiddleware(_middleware));
        }
        private static async Task <IAppBuilder> UsePlatibusMiddlewareAsync(this IAppBuilder app,
                                                                           IOwinConfiguration configuration)
        {
            var baseUri = configuration.BaseUri;
            var subscriptionTrackingService = configuration.SubscriptionTrackingService;
            var messageQueueingService      = configuration.MessageQueueingService;

            var transportServiceOptions = new HttpTransportServiceOptions(baseUri, messageQueueingService, subscriptionTrackingService)
            {
                DiagnosticService = configuration.DiagnosticService,
                Endpoints         = configuration.Endpoints,
                MessageJournal    = configuration.MessageJournal,
                BypassTransportLocalDestination = configuration.BypassTransportLocalDestination
            };

            var transportService = new HttpTransportService(transportServiceOptions);
            var bus = new Bus(configuration, baseUri, transportService, messageQueueingService);

            await transportService.Init();

            await bus.Init();

            var middleware = new PlatibusMiddleware(configuration, bus, transportService);

            var appProperties = new AppProperties(app.Properties);

            appProperties = appProperties.Set("platibus.Bus", bus);
            appProperties.OnAppDisposing.Register(() =>
            {
                middleware.Dispose();
                transportService.Dispose();
                bus.Dispose();
                (messageQueueingService as IDisposable)?.Dispose();
                (subscriptionTrackingService as IDisposable)?.Dispose();
            });

            return(app.Use(middleware.Invoke));
        }
Exemple #3
0
        public async Task TransportExceptionThrownIfConnectionRefused()
        {
            var endpoint = new UriBuilder
            {
                Scheme = "http",
                Host   = "localhost",
                Port   = 53062,
                Path   = "/platibus.test/"
            }.Uri;

            var transportServiceOptions = new HttpTransportServiceOptions(endpoint, new InMemoryMessageQueueingService(), new InMemorySubscriptionTrackingService());
            var transportService        = new HttpTransportService(transportServiceOptions);

            var message = new Message(new MessageHeaders
            {
                { HeaderName.ContentType, "text/plain" },
                { HeaderName.MessageId, Guid.NewGuid().ToString() },
                { HeaderName.Destination, endpoint.ToString() },
                { HeaderName.Synchronous, "true" }
            }, "Hello, world!");

            await Assert.ThrowsAsync <ConnectionRefusedException>(() => transportService.SendMessage(message));
        }
Exemple #4
0
        /// <summary>
        /// Initializes a new <see cref="ManagedBus"/> with the specified <paramref name="configuration"/>
        /// </summary>
        /// <param name="configuration">The configuration used to initialize the bus instance
        /// and its related components</param>
        public ManagedBus(IIISConfiguration configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }
            var baseUri = configuration.BaseUri;

            _subscriptionTrackingService = configuration.SubscriptionTrackingService;
            _messageQueueingService      = configuration.MessageQueueingService;
            _messageJournal = configuration.MessageJournal;

            var transportServiceOptions = new HttpTransportServiceOptions(baseUri, _messageQueueingService, _subscriptionTrackingService)
            {
                DiagnosticService = configuration.DiagnosticService,
                Endpoints         = configuration.Endpoints,
                MessageJournal    = configuration.MessageJournal,
                BypassTransportLocalDestination = configuration.BypassTransportLocalDestination
            };

            TransportService = new HttpTransportService(transportServiceOptions);

            Bus = InitBus(configuration, TransportService, _messageQueueingService).GetResultFromCompletionSource();
        }
        /// <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);
            });
        }