public async Task Run( [ServiceBusTrigger("%ContactsTopicName%", "%ExposedContactsSubscription%", Connection = "ContactsTopicListenConnection")] Message message, MessageReceiver messageReceiver, [ServiceBus("%NotificationsTopicName%", Connection = "NotificationTopicSendConnection")] MessageSender messagesQueue) { logger.LogInformation($"C# ServiceBus topic trigger function processed message: {message}"); try { message.UserProperties.TryGetValue(MessageHeaders.UserToken, out object userTokenHeader); var infectedUserToken = userTokenHeader?.ToString(); var exposedContact = MessageHelper.GetMessageBody <ExposedContact>(message); if (string.IsNullOrEmpty(exposedContact.UserToken)) { throw new ApplicationException("The UserToken is required"); } if (exposedContact.MeetingTime == DateTime.MinValue) { throw new ApplicationException("The MeetingTime is required"); } logger.LogInformation( "UserToken: {userToken}. Exposed contact {contactToken} received.", infectedUserToken, exposedContact.UserToken); infectionService.MessageSender = messagesQueue; await infectionService.ProcessContact(exposedContact); await messageReceiver.CompleteAsync(message.SystemProperties.LockToken); } catch (Exception ex) { // Manage retries using our message retry handler if (!await RetryHandler.RetryMessageAsync( message, ex, messageReceiver, policyOptions, logger)) { logger.LogError($"Unhandled exception: {ex.Message}", ex); throw; } } }
public async Task Run( [ServiceBusTrigger("%NotificationsTopicName%", "%StatusNotificationSubscription%", Connection = "NotificationsTopicListenConnection")] Message message, MessageReceiver messageReceiver) { logger.LogInformation($"C# ServiceBus topic trigger function processed message: {message}"); try { message.UserProperties.TryGetValue(MessageHeaders.UserToken, out object userTokenHeader); var contactToken = userTokenHeader?.ToString(); var pushNotification = MessageHelper.GetMessageBody <PushNotification>(message); if (pushNotification == null || !pushNotification.IsValid()) { throw new BadMessageException("Invalid message received."); } logger.LogInformation("ContactToken: {contactToken}. Sending notification...", contactToken); await notificationsService.PushMessageAsync(pushNotification); await messageReceiver.CompleteAsync(message.SystemProperties.LockToken); } catch (Exception ex) { // Manage retries using our message retry handler if (!await RetryHandler.RetryMessageAsync( message, ex, messageReceiver, policyOptions, logger)) { logger.LogError(ex, $"Unhandled exception: {ex.Message}"); throw; } } }