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.
As of NServiceBus 9.2, the DataBus
feature is available as a dedicated NuGet package. The API documented on this page will continue to work for NServiceBus Version 9 but it will hint about its upcoming obsoletion with the following warning: The DataBus feature is released as a dedicated 'NServiceBus.ClaimCheck' package.. The new documentation is here.
Usage
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;
}
}