/// <inheritdoc cref="SendAsync{TQueue, TMessage}(TMessage)"/> public static Task SendAsync <TQueue>(ICommandMessage <TQueue> message, Type messageType) where TQueue : ISendCommandQueue, new() { RockLogger.Log.Debug(RockLogDomains.Core, "Send Message Async: {@message} Message Type: {1}", message, messageType); if (!IsReady()) { ExceptionLogService.LogException($"A message was sent before the message bus was ready: {RockMessage.GetLogString( message )}"); return(Task.CompletedTask); } var queue = RockQueue.Get <TQueue>(); var endpoint = _transportComponent.GetSendEndpoint(_bus, queue.NameForConfiguration); message.SenderNodeName = NodeName; // NOTE: Use Task.Run to wrap an async instead of directly using async, otherwise async will get an exception if it isn't done before the HttpContext is disposed. return(Task.Run(async() => { await endpoint.Send(message, messageType, context => { context.TimeToLive = RockQueue.GetTimeToLive(queue); }); })); }
/// <summary> /// Sends the command message. /// </summary> /// <typeparam name="TQueue">The type of the queue.</typeparam> /// <param name="message">The message.</param> /// <param name="messageType">Type of the message.</param> public static async Task SendAsync <TQueue>(ICommandMessage <TQueue> message, Type messageType) where TQueue : ISendCommandQueue, new() { RockLogger.Log.Debug(RockLogDomains.Core, "Send Message Async: {@message} Message Type: {1}", message, messageType); if (!IsReady()) { ExceptionLogService.LogException($"A message was sent before the message bus was ready: {RockMessage.GetLogString( message )}"); return; } var queue = RockQueue.Get <TQueue>(); var endpoint = _transportComponent.GetSendEndpoint(_bus, queue.NameForConfiguration); message.SenderNodeName = NodeName; await endpoint.Send(message, messageType, context => { context.TimeToLive = RockQueue.GetTimeToLive(queue); }); }