У меня есть проект Azure WebJobs, который обрабатывает множество трудоемких задач, инициируемых действиями веб-сайта. Он работает нормально.Triggering WebJob-метод на основе свойства сообщения
Но отображение сообщения на вызов метода использует магические строки:
public class SomeClass
{
public async Task ProcessMessage(
[ QueueTrigger("%" + nameof(ContainerQueueConstants.FilteredVoterFiles) + "%") ] AgencyOutreachMessage
msg,
TextWriter azureLogWriter
)
{
PhaseNames.SetNames("Exporting Data", "Job Completed");
await ExecuteFromMessage(msg, azureLogWriter, Launch);
}
}
public class ContainerQueueConstants
{
public const string ImportFile = "import-file";
public const string VoterTraits = "voter-traits";
public const string Voter = "voter";
public const string FilteredVoterFiles = "filtered-voter-files";
}
Я хотел бы уйти от использования жестко закодированные строки для имен очередей. В идеале я хотел бы направить сообщение конкретному методу, основанному на значении свойства, содержащегося в сообщении.
Но я не уверен, что это возможно, по крайней мере, в версии 1.1.x SDK WebJobs.
Рекомендации или рекомендации оценены.
Если вы хотите вызвать метод, основанный на свойстве в сообщении, почему бы не просто десериализовать сообщение, проверьте значение свойства и вызовите требуемый метод на основе значения свойства? Или я не понимаю, и вы хотите отслеживать несколько очередей, каждый из которых имеет другое имя очереди, которое вы не хотите жесткого кода? –
Я бы хотел сделать последнее, Роб: контролировать несколько очередей, которые не имеют жестко названных имен. Ваша идея будет работать нормально, за исключением того, что по другим причинам я управляю каждой из текущих очередей, как Singletons, и если я выталкиваю все сообщения через одну очередь Singleton, они будут безответственно отложены. Хотя это может быть наилучшей альтернативой, все рассмотрено. –
Есть ли причина, по которой вам нужно использовать QueueTriggerAttribute, а не просто создавать экземпляры N CloudQueue для мониторинга N разных очередей хранения? Или будет использоваться N различных экземпляров CloudQueue? Я также должен спросить, будет ли получающее приложение WebJob. –