c# - 有没有办法在启动期间动态确定 Azure webjob 中触发的队列的数量和名称?
问题描述
我正在使用带有队列触发功能的 Azure webjob 来侦听多个 Azure 队列。每个队列的处理方法是相同的(但队列仍然需要分开)。我想知道是否有一种方法可以将队列名称列表存储在配置中并动态创建在启动时在这些队列上触发的函数?
我知道可以使用 INameResolver对单个队列执行此操作,但我找不到多个队列的解决方案。
解决方案
实际上,您可以在 Function 中编写服务器处理方法。当一个 webjob 运行时,它会遍历你函数中的所有方法。
您可以参考以下代码来动态触发多个队列。
在程序中:
static void Main()
{
var host = new JobHost(new JobHostConfiguration
{
NameResolver = new QueueNameResolver(),
});
host.RunAndBlock();
}
在功能:
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger("%queuename1%")] string message, TextWriter log)
{
log.WriteLine(message);
Console.WriteLine("success");
}
public static void ProcessQueueMessage1([QueueTrigger("%queuename2%")] string message, TextWriter log)
{
log.WriteLine(message);
Console.WriteLine("success2");
}
}
在 QueueNameResolver 中:
public class QueueNameResolver : INameResolver
{
public string Resolve(string name)
{
return ConfigurationManager.AppSettings[name].ToString();
}
}
在 App.config 中:
<appSettings>
<add key="queuename1" value="queue"/>
<add key="queuename2" value="myqueue"/>
</appSettings>
无论您将消息添加到队列还是 myqueue,它都会一直监听它们。
推荐阅读
- python - Openpyxl - 如何引用另一张纸上的单元格
- android - 我的 Android 应用程序数据库访问在模拟器中工作,但在生产中获取空值
- java - 后台服务崩溃
- java - 同步异步回调方法调用
- spring-boot - 无法从 Kubernetese 配置映射中读取 int 值
- ios - 如何在 SwiftUI ZStack 中对齐文本以适应较小的屏幕尺寸?
- docker - 将 nginx 默认端口映射到不同的端口
- git-svn - 获取已删除的 git-svn 文件的 SVN URL
- c# - Blazor - 带有 OSM 的单页
- javascript - 如何检查对象内部存在的键的实例