Getting Started
Architecture
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

File Share Data Bus

NuGet Package: NServiceBus (8.x)

The file share data bus allows large properties to be transferred via a Windows file share.

This implementation leverages both serialization and headers to provide its functionality.

Usage

var dataBus = endpointConfiguration.UseDataBus<FileShareDataBus, SystemJsonDataBusSerializer>();
dataBus.BasePath(databusPath);

Cleanup strategy

FileShareDataBus does not remove physical attachments once the message has been processed.

The business requirements can indicate how a message and its corresponding file should be processed and when the files can safely be removed. One strategy to deal with these attachments is to set up a cleanup policy which removes any attachments after a certain number of days have passed based on business Service-Level Agreements.

The file location used by the data bus is set during configuration time.

var dataBus = endpointConfiguration.UseDataBus<FileShareDataBus, SystemJsonDataBusSerializer>();
dataBus.BasePath(@"\\share\databus_attachments\");

This same location should be used when performing the cleanup.

For example, this path can be used in a Handler for a message containing data bus properties.

public class Handler :
    IHandleMessages<MessageWithLargePayload>,
    IHandleMessages<RemoveDatabusAttachment>
{

    public Task Handle(MessageWithLargePayload message, IMessageHandlerContext context)
    {
        var filePath = Path.Combine(@"\\share\databus_attachments\", message.LargeBlob.Key);
        var removeAttachment = new RemoveDatabusAttachment
        {
            FilePath = filePath
        };
        var options = new SendOptions();
        options.RouteToThisEndpoint();
        options.DelayDeliveryWith(TimeSpan.FromDays(30));
        return context.Send(removeAttachment, options);
    }

    public Task Handle(RemoveDatabusAttachment message, IMessageHandlerContext context)
    {
        var filePath = message.FilePath;
        // Code to clean up
        return Task.CompletedTask;
    }
}

Samples


Last modified