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)); }
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)); }
/// <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); }); }