public async Task RunAsync( [ServiceBusTrigger("%MARKET_DATA_QUEUE_TOPIC_NAME%", Connection = "MARKET_DATA_QUEUE_CONNECTION_STRING")] QueueMessage queueMessage, ILogger logger) { if (queueMessage == null || queueMessage.MessageType == null || queueMessage.Message == null) { throw new ArgumentNullException(nameof(queueMessage)); } logger.LogInformation($"C# ServiceBus queue trigger function processed message: {queueMessage}"); logger.LogInformation($"With type: {queueMessage.MessageType}"); logger.LogInformation($"With value: {queueMessage.Message}"); var messageType = _resolver.GetTypeByCategory(queueMessage.MessageType); if (messageType == null) { throw new ArgumentException($"Invalid category: {queueMessage.MessageType}"); } var hubRequest = await _rehydrator.RehydrateAsync(queueMessage.Message, messageType).ConfigureAwait(false); if (hubRequest == null) { throw new ArgumentException(nameof(queueMessage.Message)); } await _mediator.Send(hubRequest).ConfigureAwait(false); await Task.CompletedTask.ConfigureAwait(false); }
internal static async Task <IHubMessage?> RehydrateAsync(this IHubRehydrator rehydrator, string input, Type messageType) { if (rehydrator == null) { throw new ArgumentNullException(nameof(rehydrator)); } if (input == null) { throw new ArgumentNullException(nameof(input)); } if (messageType == null) { throw new ArgumentNullException(nameof(messageType)); } await using (var stream = new MemoryStream()) await using (var writer = new StreamWriter(stream)) { await writer.WriteAsync(input).ConfigureAwait(false); await writer.FlushAsync().ConfigureAwait(false); stream.Position = 0; return(await rehydrator.RehydrateAsync(stream, messageType).ConfigureAwait(false)); } }
public async Task RunAsync( [EventHubTrigger("%REQUEST_QUEUE_NAME%", Connection = "REQUEST_QUEUE_CONNECTION_STRING")] MessageEnvelope eventData, ILogger logger) { if (eventData is null) { throw new ArgumentNullException(nameof(eventData)); } if (logger is null) { throw new ArgumentNullException(nameof(logger)); } logger.LogInformation($"{FunctionName} started processing a request."); var requestType = _resolver.GetTypeByCategory(eventData.MessageType); if (requestType == null) { logger.LogWarning("{messageType} not found", eventData.MessageType); return; // TODO: go to error queue or storage? } using (var body = new MemoryStream(Encoding.UTF8.GetBytes(eventData.Message))) { var hubRequest = await _rehydrator.RehydrateAsync(body, requestType).ConfigureAwait(false); if (hubRequest == null) { logger.LogWarning("CommandRouter: could not rehydrate {messageType}", eventData.MessageType); return; // TODO: go to error queue or storage? } await _commandDispatcher.DispatchAsync(hubRequest).ConfigureAwait(false); } }