Azure WebJob- QueueTrigger 暂存和生产
Azure WebJob- QueueTrigger Staging and Production
我有一个 Azure WebJob 将用于暂存和生产。正确环境的密钥在 app.config 文件中设置。
ConfigManager class 从 app.config 文件中读取属性。
public static string FirstQueue
{
get { return ConfigurationManager.AppSettings["FirstQueue"]; }
}
我希望 QueueTrigger 从 app.config 文件中指定的正确队列中读取。
public static void ProcessFirstQueue([QueueTrigger(ConfigManager.FirstQueue)] string message)
{
//some function
}
但是,QueueTrigger 似乎不喜欢这样。我收到 "An attribute argument must be a constant expression, type of expression...." 任何有关设置的建议。我不想在队列触发器中对值进行硬编码。
谢谢
您可以在运行时使用
解析队列名称
INameResolver
这里有一个例子来证明这一点:
网络工作代码:
public class Program
{
private static void Main(string[] args)
{
var config =
new JobHostConfiguration("insert connection string")
{
NameResolver = new QueueNameResolver()
};
var host = new JobHost(config);
host.RunAndBlock();
}
public static void ProcessNotification([QueueTrigger("%queueKey%")] string item)
{
//Handle message
}
public static void ProcessPoison([QueueTrigger("%queueKeyPoison%")] string item)
{
//Handle poison message
}
}
这是 QueueNameResolver class:
public class QueueNameResolver : INameResolver
{
//name = queueKey or queueKeyPoison
public string Resolve(string name)
{
//Use the name to get it from the app.config or somewhere else.
}
}
希望这对您有所帮助,
我有一个 Azure WebJob 将用于暂存和生产。正确环境的密钥在 app.config 文件中设置。
ConfigManager class 从 app.config 文件中读取属性。
public static string FirstQueue
{
get { return ConfigurationManager.AppSettings["FirstQueue"]; }
}
我希望 QueueTrigger 从 app.config 文件中指定的正确队列中读取。
public static void ProcessFirstQueue([QueueTrigger(ConfigManager.FirstQueue)] string message)
{
//some function
}
但是,QueueTrigger 似乎不喜欢这样。我收到 "An attribute argument must be a constant expression, type of expression...." 任何有关设置的建议。我不想在队列触发器中对值进行硬编码。 谢谢
您可以在运行时使用
解析队列名称INameResolver
这里有一个例子来证明这一点:
网络工作代码:
public class Program
{
private static void Main(string[] args)
{
var config =
new JobHostConfiguration("insert connection string")
{
NameResolver = new QueueNameResolver()
};
var host = new JobHost(config);
host.RunAndBlock();
}
public static void ProcessNotification([QueueTrigger("%queueKey%")] string item)
{
//Handle message
}
public static void ProcessPoison([QueueTrigger("%queueKeyPoison%")] string item)
{
//Handle poison message
}
}
这是 QueueNameResolver class:
public class QueueNameResolver : INameResolver
{
//name = queueKey or queueKeyPoison
public string Resolve(string name)
{
//Use the name to get it from the app.config or somewhere else.
}
}
希望这对您有所帮助,