Планирование сообщения ActiveMQ с TTL в MassTransit

Я использую MassTransit, чтобы запланировать сообщение для последующей доставки, используя подключаемый модуль планирования ActiveMQ.

var provider = new ActiveMqScheduleMessageProvider(_sendEndpointProvider);
var scheduler = new MessageScheduler(provider, _bus.Topology);

var isPublishAddressFetched = _bus.Topology
    .Publish<TMessage>()
    .TryGetPublishAddress(_bus.Address, out var publishAddress);
if (!isPublishAddressFetched)
    throw new InvalidOperationException("Publish address could not be fetched from " + _bus.Address);

using var combinedCancellationTokenSource = GetCombinedCancellationTokenWithTimeout(cancellationToken);

await scheduler.ScheduleSend(
    publishAddress,
    delay,
    message,
    combinedCancellationTokenSource.Token);

Это прекрасно работает, но я не знаю, как указать TTL в этом сценарии (с MessageScheduler). Любые идеи?


person Mathias Lykkegaard Lorenzen    schedule 03.12.2020    source источник


Ответы (1)


Чтобы установить свойства SendContext при использовании планировщика сообщений, вы можете создать канал выполнения и передать его методам планировщика.

Кроме того, в планировщике сообщений уже есть встроенный метод SchedulePublish, поэтому нет смысла делать всю работу выше — просто вызовите его.

DateTime scheduledTime = DateTime.UtcNow + TimeSpan.FromMinutes(2);

await scheduler.SchedulePublish(scheduledTime, new Message(), 
    Pipe.Execute<SendContext<Message>>(x => x.TimeToLive  = TimeSpan.FromSeconds(30)));
person Chris Patterson    schedule 03.12.2020
comment
Большое спасибо. У меня есть еще один вопрос, если у вас есть дополнительное свободное время: stackoverflow.com/questions/65128514/ - person Mathias Lykkegaard Lorenzen; 03.12.2020