我通过 RabbitMQ 传递大量数据并卸载队列,我使用声明检查模式将字节 blob 存储在队列本身之外。它工作得很好,但我有一个关于
FileSystemMessageDataRepository
中清理的问题。现在我指定 TTL 为 7 天 - 如果消费者出现任何致命问题,我们希望准备好这些数据。
// My RabbitMq setup
var messageDataRepository = new FileSystemMessageDataRepository(new DirectoryInfo(massTransitSettings.RabbitMqDataMessageRepositoryPath));
serviceCollection.AddSingleton<IMessageDataRepository>(messageDataRepository);
serviceCollection.AddMassTransit(x =>
{
x.UsingRabbitMq((context,cfg) =>
{
cfg.Host(massTransitSettings.RabbitMqHost, massTransitSettings.RabbitMqVirtualHost, h => {
h.Username(massTransitSettings.RabbitMqUsername);
h.Password(massTransitSettings.RabbitMqPassword);
});
cfg.UseMessageData(messageDataRepository);
cfg.ConfigureEndpoints(context);
});
});
// Message passing and setting up the TTL
var messageData = await messageDataRepository.PutBytes(bufferToSend, TimeSpan.FromDays(7), cancellationToken);
var payload = new MyPayload(messageData, bytesRead);
await bus.Publish(payload, cancellationToken);
我现在遇到的问题是我不希望
MessageData
消耗的消息继续存在。成功消费后,我很想删除它,但到目前为止我找不到一个选项。 IMessageDataRepository
没有删除方法,我找不到任何选项可以自动发生这种情况。有没有人有解决办法?
MassTransit 不会为您进行任何自动清理。使用 TTL 选项,文件夹按日期/小时命名,因此您应该能够编写一个足够简单的脚本来删除早于特定时间段的所有内容。