in src/Services/Infection/Infection.FnApp/Functions/ExposedContactTrigger.cs [64:112]
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;
}
}
}