Azure函数在使用ServiceBus队列触发器的消费计划中运行时处于空闲状态

Azure函数在使用ServiceBus队列触发器的消费计划中运行时处于空闲状态,azure,azure-functions,azureservicebus,Azure,Azure Functions,Azureservicebus,我在报告中也提出了这个问题,但没有收到任何关于我的职能为何闲置的指导 我有一个Azure函数在一个空闲的消费计划上运行(即不响应ServiceBus触发器队列上的新消息),尽管遵循本节中概述的说明: 函数的配置如下所示: { "ConnectionStrings": { "MyConnectionString": "Server=tcp:project.database.windows.net,1433;Database=myDB;User ID=user@project;Passw

我在报告中也提出了这个问题,但没有收到任何关于我的职能为何闲置的指导

我有一个Azure函数在一个空闲的消费计划上运行(即不响应ServiceBus触发器队列上的新消息),尽管遵循本节中概述的说明:

函数的配置如下所示:

{
  "ConnectionStrings": {
    "MyConnectionString": "Server=tcp:project.database.windows.net,1433;Database=myDB;User ID=user@project;Password=password;Encrypt=True;Connection Timeout=30;"
  },
  "Values": {
    "serviceBusConnection": "Endpoint=sb://project.servicebus.windows.net/;SharedAccessKeyName=SharedAccessKeyName;SharedAccessKey=KEY_HERE",
  }
}
函数签名为:

public static void ProcessQueue([ServiceBusTrigger("queueName", AccessRights.Listen, Connection = "serviceBusConnection")] ...)
根据GitHub问题中的讨论,我认为拥有
serviceBusConnection
条目或
AzureWebJobServiceBus
条目应该足以确保中央侦听器在向
ServiceBusQueue
添加新消息时触发函数,但事实证明并非如此


有没有人可以澄清这两种设置的使用方式之间的差异,或者注意到我提供的设置中可能导致在一段时间不活动后无法正确触发该功能的任何其他设置?

我认为这种行为可能有几个原因。我有几个Azure Sub,其中只有一个存在基于存储/服务总线的触发器问题,只有在应用程序未空闲时才会弹出。到目前为止,我观察到以下列出的操作将阻止触发器正常工作:

  • 创建任何基于存储的触发器,删除(出于任何原因)触发对象并重新创建它
  • 通过删除/更改关联对象而不重新编译函数来损坏azure函数输入参数
当其中一个函数未能编译/绑定到触发器或输入参数且挂起时,重新启动函数应用程序可能会导致相同的问题。 还观察到,为触发器绑定使用传统连接字符串设置将不起作用

如果问题是由上述任何操作引起的,则受影响功能应用程序的清洁部署极有可能解决问题

编辑
这似乎也是由于在functions应用程序上设置了授权/身份验证而导致的,但我还没有弄清楚这是一般情况下发生的还是Auth具有特定配置时发生的。通过在所有受影响的Azure sub上禁用auth进行测试-函数在30-40分钟后变为空闲状态,队列触发器仍会启动执行,尽管延迟与预期一样。我发现了一个与此相关的旧问题,但上面说问题已解决。

如果您提到某个特定问题,是否介意添加一个链接?谢谢。你在门户中也有应用内设置吗?@Mikhail-是的,我在门户中也有serviceBusConnection设置。@SeanFeldman,对不起,我不知道你的意思。我链接到Azure论坛帖子和我认为我看到的GitHub问题。你还想要什么链接?你能直接或间接地分享你的函数应用程序名称吗()?谢谢你的建议。当您说Clean deploy时,您是指从Azure中完全删除该函数,并在从Visual Studio发布过程中重新创建它,还是指其他什么?您能解释一下“传统连接字符串设置”吗?由于我的配置中定义了一个
ConnectionStrings
设置,我想知道这是否是问题所在。@Heather\E您有应用程序设置和连接字符串设置,但您应该只使用应用程序设置部分。连接字符串是一个遗留问题。干净的部署意味着删除函数应用程序并重新创建它,然后从CI/VS执行代码部署。如果生产受到影响,这可能不那么容易,所以首先尝试重新创建函数本身。请注意,我写的所有内容都是针对运行时1.0.xxx的感谢您的澄清。我要到明天才能测试这个,但是你给了我一些东西让我试一下,如果其中任何一个对我有用,我一定会回来给你的答案打上正确的标记。