Example #1
0
    /// <summary>
    /// Sends
    /// </summary>
    /// <param name="destinationAddress"></param>
    /// <param name="message"></param>
    /// <param name="context"></param>
    /// <returns></returns>
    public async Task Send(string destinationAddress, TransportMessage message, ITransactionContext context)
    {
        // this timestamp will only be used in the file names of message files written to approach some kind
        // of global ordering - individual messages sent from this context will have sequence numbers on them
        // in addition to the timestamp
        var time = _rebusTime.Now;

        var outgoingMessages = context.GetOrAdd("file-system-transport-outgoing-messages", () =>
        {
            var queue = new ConcurrentQueue <OutgoingMessage>();

            context.OnCommitted(_ => SendOutgoingMessages(queue, time));
            context.OnAborted(_ => AbortOutgoingMessages(queue));

            return(queue);
        });

        var outgoingMessage = await OutgoingMessage.WriteTemp(GetDirectory(destinationAddress), message);

        outgoingMessages.Enqueue(outgoingMessage);
    }