static async Task <bool> ScheduleSend(SendEndpointContext clientContext, AzureServiceBusSendContext <T> context) { var now = DateTime.UtcNow; var enqueueTimeUtc = context.ScheduledEnqueueTimeUtc.Value; if (enqueueTimeUtc < now) { LogContext.Debug?.Log("The scheduled time was in the past, sending: {ScheduledTime}", context.ScheduledEnqueueTimeUtc); return(false); } try { var brokeredMessage = CreateBrokeredMessage(context); var sequenceNumber = await clientContext.ScheduleSend(brokeredMessage, enqueueTimeUtc).ConfigureAwait(false); context.SetScheduledMessageId(sequenceNumber); context.LogScheduled(enqueueTimeUtc); return(true); } catch (ArgumentOutOfRangeException) { LogContext.Debug?.Log("The scheduled time was rejected by the server, sending: {MessageId}", context.MessageId); return(false); } }
static async Task CancelScheduledSend(SendEndpointContext clientContext, long sequenceNumber) { try { await clientContext.CancelScheduledSend(sequenceNumber).ConfigureAwait(false); LogContext.Debug?.Log("Canceled scheduled message {SequenceNumber} {EntityPath}", sequenceNumber, clientContext.EntityPath); } catch (MessageNotFoundException exception) { LogContext.Warning?.Log(exception, "The scheduled message was not found: {SequenceNumber} {EntityPath}", sequenceNumber, clientContext.EntityPath); } }
public async Task Send(SendEndpointContext clientContext) { var context = new AzureServiceBusSendContext <T>(_message, _cancellationToken); try { await _pipe.Send(context).ConfigureAwait(false); CopyIncomingIdentifiersIfPresent(context); if (IsCancelScheduledSend(context, out var sequenceNumber)) { await CancelScheduledSend(clientContext, sequenceNumber).ConfigureAwait(false); return; } if (context.ScheduledEnqueueTimeUtc.HasValue) { var scheduled = await ScheduleSend(clientContext, context).ConfigureAwait(false); if (scheduled) { return; } } await _observer.PreSend(context).ConfigureAwait(false); var brokeredMessage = CreateBrokeredMessage(context); await clientContext.Send(brokeredMessage).ConfigureAwait(false); context.LogSent(); await _observer.PostSend(context).ConfigureAwait(false); } catch (Exception ex) { await _observer.SendFault(context, ex).ConfigureAwait(false); throw; } }
static async Task CancelScheduledSend(SendEndpointContext clientContext, long sequenceNumber) { try { await clientContext.CancelScheduledSend(sequenceNumber).ConfigureAwait(false); if (_log.IsDebugEnabled) { _log.DebugFormat("Canceled Scheduled: {0} {1}", sequenceNumber, clientContext.EntityPath); } } catch (MessageNotFoundException exception) { if (_log.IsDebugEnabled) { _log.DebugFormat("The scheduled message was not found: {0}", exception.Message); } } }
public async Task Send(SendEndpointContext clientContext) { LogContext.SetCurrentIfNull(_context.LogContext); var context = new AzureServiceBusSendContext <T>(_message, _cancellationToken); await _pipe.Send(context).ConfigureAwait(false); CopyIncomingIdentifiersIfPresent(context); StartedActivity?activity = LogContext.IfEnabled(OperationName.Transport.Send)?.StartSendActivity(context, (nameof(context.PartitionKey), context.PartitionKey), (nameof(context.SessionId), context.SessionId)); try { if (IsCancelScheduledSend(context, out var sequenceNumber)) { await CancelScheduledSend(clientContext, sequenceNumber).ConfigureAwait(false); return; } if (context.ScheduledEnqueueTimeUtc.HasValue) { var scheduled = await ScheduleSend(clientContext, context).ConfigureAwait(false); if (scheduled) { return; } } if (_context.SendObservers.Count > 0) { await _context.SendObservers.PreSend(context).ConfigureAwait(false); } var brokeredMessage = CreateBrokeredMessage(context); await clientContext.Send(brokeredMessage).ConfigureAwait(false); context.LogSent(); if (_context.SendObservers.Count > 0) { await _context.SendObservers.PostSend(context).ConfigureAwait(false); } } catch (Exception ex) { if (_context.SendObservers.Count > 0) { await _context.SendObservers.SendFault(context, ex).ConfigureAwait(false); } throw; } finally { activity?.Stop(); } }
public async Task Send(SendEndpointContext context, IPipe <SendEndpointContext> next) { await ConfigureTopology(context).ConfigureAwait(false); await next.Send(context).ConfigureAwait(false); }
public SharedSendEndpointContext(SendEndpointContext context, CancellationToken cancellationToken) { CancellationToken = cancellationToken; _context = context; }
public CollectorSendEndpointContextSupervisor(SendEndpointContext context) { _context = context; }