user4266661
user4266661

Reputation:

Triggering WebJob Method Based on Message Property

I have an Azure WebJobs project which handles a number of time-consuming tasks triggered by website actions. It works fine.

But the mapping from message to method call uses magic strings:

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";
}

I'd like to get away from using hard-coded strings for queue names. Ideally, I'd like to be able to route a message to a particular method based on the value of a property contained in the message.

But I'm not sure if that's even possible, at least in the 1.1.x version of the WebJobs SDK.

Suggestions or advice appreciated.

Upvotes: 0

Views: 86

Answers (1)

Rob Reagan
Rob Reagan

Reputation: 7686

I suggest using N CloudQueue instances to monitor N different Storage Queues. Since you're doing this in a WebJob, you will probably do this as a continuous webjob and have to perform the polling for each queue yourself. You will also have to take responsibility for removing successfully processed messages.

The QueueTriggerAttribute has built-in support for deadlettering. I do not believe that there is automatic deadlettering support if you do not use the QueueTriggerAttribute.

Upvotes: 1

Related Questions