用于监听任何服务总线主题/订阅的azure函数

标签 azure azure-functions azureservicebus

使用模板创建 azure 函数,可以创建仅监听特定一对 azure 主题/订阅的函数:

{
  "bindings": [
    {
      "name": "mySbMsg",
      "type": "serviceBusTrigger",
      "direction": "in",
      "topicName": "ftopic1",
      "subscriptionName": "mysub",
      "connection": "collosysazfuncsb_RootManageSharedAccessKey_SERVICEBUS",
      "accessRights": "Manage"
    }
  ],
  "disabled": false
}

然后在 run.csx 中您将收到消息

public static void Run(string message, TraceWriter log)
{
    log.Info($"message: {message}");
}

有没有办法使用 azure 函数监听任何主题/订阅,然后在 Run 方法中接收 topicName 和 subscriptionName 作为参数。

将主题名称设置为 * 没有帮助,而且它也不在 Run 中提供主题名称。

最佳答案

Azure Functions 仅允许监听单个队列或订阅。它不允许监听多个实体(队列或订阅),因为 Azure 服务总线客户端不支持此功能。相反,因为它 was pointed out ,您可以利用 Auto Forwarding feature Azure 服务总线。代理会将所有消息转发到目标主题/队列,并且您将拥有一个供 Azure Function 提供的队列。

需要注意的是,自动转发的消息不会携带任何可以识别它们源自哪个队列/订阅的信息。这只能通过 dead-lettered messages 实现。 .

由于您对主题感兴趣,因此您可以通过对订阅规则执行操作来“解决”此问题,该操作将使用自定义属性标记消息。例如,有 3 个主题,每个主题都有默认订阅,还有一个带有规则操作的默认过滤器

设置[x-source] = 'topic-N'

其中 N 是主题标识符,将导致所有自动转发的消息包含 x-source 自定义属性,其值与其源自的主题相对应。

关于用于监听任何服务总线主题/订阅的azure函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766882/

相关文章:

c# - 将本地 ASP.NET 应用程序发布到 Azure 后无法登录

azure - 用于检查声明 Azure 函数的钩子(Hook)?

c# - Azure 辅助角色回收与未处理的服务总线故障消息

Azure 服务总线接收和删除

azure - 更新 EKS kubernetes 集群代理池配置文件

.net - 在 azure 上无法找到程序集 'Microsoft.IdentityModel"错误

c# - ReCAPTCHA 多次失败,错误为 "An existing connection was forcibly closed by the remote host"

azure - 错误索引方法 FunctionName 未解析为值

azure - 使用 Visual Studio Code 在本地运行和调试 2 Azure 函数

c# - AppContextSwitchOverrides 不起作用,在授权上下文中发现 3 个 DNS 声明