async Task Subscribe(MessageMetadata eventType, CancellationToken cancellationToken) { var eventDir = GetEventDirectory(eventType.MessageType); // the subscription directory and the subscription information will be created no matter if there's a publisher for the event assuming that the publisher haven’t started yet Directory.CreateDirectory(eventDir); var subscriptionEntryPath = GetSubscriptionEntryPath(eventDir); var attempts = 0; // since we have a design that can run into concurrency exceptions we perform a few retries while (true) { try { await AsyncFile.WriteText(subscriptionEntryPath, localAddress, cancellationToken).ConfigureAwait(false); return; } catch (IOException) { attempts++; if (attempts > 10) { throw; } //allow the other task to complete await Task.Delay(100, cancellationToken).ConfigureAwait(false); } } }
public async Task Subscribe(Type eventType, ContextBag context) { var eventDir = GetEventDirectory(eventType); // that way we can detect that there is indeed a publisher for the event. That said it also means that we will have do "retries" here due to race condition. Directory.CreateDirectory(eventDir); var subscriptionEntryPath = GetSubscriptionEntryPath(eventDir); var attempts = 0; // since we have a design that can run into concurrency exceptions we perform a few retries while (true) { try { await AsyncFile.WriteText(subscriptionEntryPath, localAddress).ConfigureAwait(false); return; } catch (IOException) { attempts++; if (attempts > 10) { throw; } //allow the other task to complete await Task.Delay(100).ConfigureAwait(false); } } }
static Func <string, Task> BuildDefaultDiagnosticsWriter(ReadOnlySettings settings) { if (!settings.TryGet <string>(DiagnosticSettingsExtensions.DiagnosticsPathKey, out var diagnosticsRootPath)) { try { diagnosticsRootPath = Path.Combine(Host.GetOutputDirectory(), ".diagnostics"); } catch (Exception e) { logger.Error("Unable to determine the diagnostics output directory. Check the attached exception for further information, or configure a custom diagnostics directory using 'EndpointConfiguration.SetDiagnosticsPath()'.", e); } } if (!Directory.Exists(diagnosticsRootPath)) { Directory.CreateDirectory(diagnosticsRootPath); } var endpointName = settings.EndpointName(); // Once we have the proper hosting model in place we can skip the endpoint name since the host would // know how to handle multi hosting but for now we do this so that multi-hosting users will get a file per endpoint var startupDiagnosticsFileName = $"{endpointName}-configuration.txt"; var startupDiagnosticsFilePath = Path.Combine(diagnosticsRootPath, startupDiagnosticsFileName); return(data => AsyncFile.WriteText(startupDiagnosticsFilePath, data)); }
public Task Enlist(string messagePath, string messageContents) { var inProgressFileName = Path.GetFileNameWithoutExtension(messagePath) + ".out"; var txPath = Path.Combine(transactionDir, inProgressFileName); var committedPath = Path.Combine(commitDir, inProgressFileName); outgoingFiles.Enqueue(new OutgoingFile(committedPath, messagePath)); return(AsyncFile.WriteText(txPath, messageContents)); }
static Func <string, Task> BuildDefaultDiagnosticsWriter(HostingComponent.Configuration configuration) { var diagnosticsRootPath = configuration.DiagnosticsPath; if (diagnosticsRootPath == null) { try { diagnosticsRootPath = Path.Combine(Host.GetOutputDirectory(), ".diagnostics"); } catch (Exception e) { logger.Warn("Unable to determine the diagnostics output directory. Check the attached exception for further information, or configure a custom diagnostics directory using 'EndpointConfiguration.SetDiagnosticsPath()'.", e); return(data => Task.CompletedTask); } } if (!Directory.Exists(diagnosticsRootPath)) { try { Directory.CreateDirectory(diagnosticsRootPath); } catch (Exception e) { logger.Warn("Unable to create the diagnostics output directory. Check the attached exception for further information, or change the diagnostics directory using 'EndpointConfiguration.SetDiagnosticsPath()'.", e); return(data => Task.CompletedTask); } } // Once we have the proper hosting model in place we can skip the endpoint name since the host would // know how to handle multi hosting but for now we do this so that multi-hosting users will get a file per endpoint var startupDiagnosticsFileName = $"{configuration.EndpointName}-configuration.txt"; var startupDiagnosticsFilePath = Path.Combine(diagnosticsRootPath, startupDiagnosticsFileName); return(data => { var prettied = JsonPrettyPrinter.Print(data); return AsyncFile.WriteText(startupDiagnosticsFilePath, prettied); }); }
static Func <string, Task> BuildDefaultDiagnosticsWriter(ReadOnlySettings settings) { if (!settings.TryGet <string>(DiagnosticSettingsExtensions.DiagnosticsPathKey, out var diagnosticsRootPath)) { diagnosticsRootPath = Path.Combine(Host.GetOutputDirectory(), ".diagnostics"); } if (!Directory.Exists(diagnosticsRootPath)) { Directory.CreateDirectory(diagnosticsRootPath); } var endpointName = settings.EndpointName(); // Once we have the proper hosting model in place we can skip the endpoint name since the host would // know how to handle multi hosting but for now we do this so that multi-hosting users will get a file per endpoint var startupDiagnosticsFileName = $"{endpointName}-configuration.txt"; var startupDiagnosticsFilePath = Path.Combine(diagnosticsRootPath, startupDiagnosticsFileName); return(data => AsyncFile.WriteText(startupDiagnosticsFilePath, data)); }
public Task Enlist(string messagePath, string messageContents) => AsyncFile.WriteText(messagePath, messageContents);
public Task Enlist(string messagePath, string messageContents, CancellationToken cancellationToken) => AsyncFile.WriteText(messagePath, messageContents, cancellationToken);