单例 Azure 函数 RabbitMQ 触发器

Singleton Azure Function RabbitMQ Trigger

我正在开发一个新的 C# Azure Durable Function,它在新的 XML 消息发布到队列时使用 RabbitMQ 绑定作为触发器。启动函数根据 XML 消息的内容启动两个编排函数之一。

我希望起始函数确保在任何时候只有一个给定编排类型的实例 运行。因此,编排类型A和编排类型B的单个实例同时运行ning是可以的;但绝不是类型 A 或类型 B 的两个实例。

有一个很好的文档 here 描述了如何查询编排状态。我不确定如何处理 RabbitMQ 绑定接收到的新消息,如果启动器确定相关类型的编排当前是 运行ning?

我用几个小块解决了这个问题。在 host.json 文件中,我将 prefectchCount 设置为 1:

"extensions": {
"rabbitMQ": {
  "prefetchCount": 1 
}

在编排起始代码中(由收到来自 RabbitMQ 的消息触发)我循环直到没有编排实例 运行,然后开始一个新的:

while (runningInstances.DurableOrchestrationState.Where
                    (x => x.Name == PortfolioActivationOrchestration
                    && x.RuntimeStatus == OrchestrationRuntimeStatus.Running).Count() > 0)
                {
                    _sl.LogInfo("Going to wait for PortfolioActivationOrchestration to complete");
                    Thread.Sleep(1000);
                    runningInstances = await starter.ListInstancesAsync(
                        noFilter,
                        CancellationToken.None);
                }
await starter.StartNewAsync(ClientActivationOrchestration, propBag);