触发基于消息属性的WebJob方法

时间:2017-02-14 18:59:20

标签: azure azure-webjobs

我有一个Azure WebJobs项目,它处理由网站操作触发的许多耗时的任务。它工作正常。

但是从消息到方法调用的映射使用魔术字符串:

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版本的WebJobs SDK中是不可能的。

赞赏的建议或意见。

1 个答案:

答案 0 :(得分:2)

我建议使用N个CloudQueue实例来监控N个不同的存储队列。由于您在WebJob中执行此操作,因此您可能会将其作为连续的webjob执行此操作,并且必须自己执行每个队列的轮询。您还必须负责删除成功处理的邮件。

QueueTriggerAttribute内置了对deadlettering的支持。如果您不使用QueueTriggerAttribute,我不相信有自动死钱支持。