我有一个作为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);
}
}
由于队列是函数定义的一部分,除了拥有单独的存储帐户之外,还有另一种方法可以在队列触发器中切换队列名称吗?
答案 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.
希望这有帮助,