public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings) { _onError = onError; _pipeline = onMessage; _messageDirectory = DirectoryBuilder.BuildBasePath(settings.InputQueue); _purgeOnStartup = settings.PurgeOnStartup; return(Task.CompletedTask); }
private static void BuildQueueDirectory(string address) { var queuePath = DirectoryBuilder.BuildBasePath(address); var committedPath = Path.Combine(queuePath, ".committed"); Directory.CreateDirectory(committedPath); var bodiesPath = Path.Combine(queuePath, ".bodies"); Directory.CreateDirectory(bodiesPath); }
public Task Dispatch(TransportOperations outgoingMessages, TransportTransaction transaction, ContextBag context) { foreach (var operation in outgoingMessages.UnicastTransportOperations) { var destinationBasePath = DirectoryBuilder.BuildBasePath(operation.Destination); var nativeMessageId = Guid.NewGuid().ToString(); var bodyPath = Path.Combine(destinationBasePath, ".bodies", $"{nativeMessageId}.xml"); var bodyDirectory = Path.GetDirectoryName(bodyPath); if (bodyDirectory != null) { if (!Directory.Exists(bodyDirectory)) { Directory.CreateDirectory(bodyDirectory); } } File.WriteAllBytes(bodyPath, operation.Message.Body); var messageContents = new List <string> { bodyPath, HeaderSerializer.Serialize(operation.Message.Headers) }; var messagePath = Path.Combine(destinationBasePath, $"{nativeMessageId}.txt"); // Write to a temp file first so an atomic move can be done. // This avoids the file being locked when the receiver triest to process it. var tempFilePath = Path.GetTempFileName(); File.WriteAllLines(tempFilePath, messageContents); File.Move(tempFilePath, messagePath); } return(Task.CompletedTask); }