配置Azure WebJobs以进行分段和生产

时间:2015-05-07 20:00:57

标签: azure-webjobs

我有一个作为Azure网站托管的Web应用程序(ASP.NET MVC 4)。它还有另外两个组件,一个Worker Role和一个Web Job。

辅助角色会对应用程序中正在进行的数据/活动执行一些嗅探,并根据我认为的标准模式,通过Azure存储队列为Web作业排队工作。以下代码段:

public class Functions
{
    // This function will get triggered/executed when a new message is written 
    // on an Azure Queue called queue.
    public static void NewBidsQueue([QueueTrigger("bids")] string message, TextWriter log)
    {
        log.WriteLine(message);
    }

    public static void SendText([QueueTrigger("texts")] string message, TextWriter log)
    {
        log.WriteLine(message);
    }

    public static void AuctionEvents([QueueTrigger("auction-events")] string message, TextWriter log)
    {
        log.WriteLine(message);
    }
}

由于队列是函数定义的一部分,除了拥有单独的存储帐户之外,还有另一种方法可以在队列触发器中切换队列名称吗?

2 个答案:

答案 0 :(得分:0)

我设计了一些hacky work-around。我使用预处理程序指令来换出字符串常量:

public static class WebJobStorageQueueNames 
{
#if DEBUG
    public const string AuctionEvents = "auction-events-test";
    public const string Texts = "texts-test";
    public const string Bids = "bids-test";
#else
    public const string AuctionEvents = "auction-events";
    public const string Texts = "texts";
    public const string Bids = "bids";
#endif
}

以及随附的功能定义:

public class Functions 
{
    public static void NewBidsQueue([QueueTrigger(WebJobStorageQueueNames.Bids)] string message, TextWriter log)
    {
        log.WriteLine(message);
    }

    public static void SendText([QueueTrigger(WebJobStorageQueueNames.Texts)] string message, TextWriter log)
    {
        log.WriteLine(message);
    }

    public static void AuctionEvents([QueueTrigger(WebJobStorageQueueNames.AuctionEvents)] string message, TextWriter log)
    {
        log.WriteLine(message);
    }

}

答案 1 :(得分:0)

您可以通过实现INameResolver动态解析队列名称。

这是一个例子。队列名称解析器

View

您需要在配置webjob时指定名称解析器:

public class QueueNameResolver : INameResolver
{
    public string Resolve(string name)
    {
        //The name comes from the function in the WebJob
        if (name == "queueKey")
        {
            return "yourqueuename";
        }
        if (name == "queueKeyPoison")
        {
            return "yourqueuename-poison";
        }
        return String.Empty;
    }
}

解析器接收参数“queueKey”,您可以决定应该使用哪个队列名称。

有更多信息here.

希望这有帮助,