函数应用无法从 Azure 服务总线获取消息
Posted
技术标签:
【中文标题】函数应用无法从 Azure 服务总线获取消息【英文标题】:Function app could not fetch message from Azure service bus 【发布时间】:2022-01-11 21:10:15 【问题描述】:我有一个服务总线触发函数应用,它无法从服务总线主题中获取消息。仅当函数应用放入 VNET 时才会发生这种情况。否则,函数应用可以从服务总线获取消息。
以下是日志中的错误消息。
Message processing error (Action=Receive, EntityPath=topicName/Subscriptions/SubscriptionName, Endpoint=servicebus-namespace01.servicebus.windows.net)Azure.Messaging.ServiceBus.ServiceBusException : An existing connection was forcibly closed by the remote host. ErrorCode: ConnectionReset (ServiceCommunicationProblem) ---> System.Net.Sockets.SocketException : An existing connection was forcibly closed by the remote host.at Microsoft.Azure.Amqp.Transport.TransportStream.EndRead(IAsyncResult asyncResult)at
My Function 应用在应用服务计划中运行。我的服务总线按标准计划运行。
函数应用的 TLS 设置没有变化。还有哪些值得研究的选项?
【问题讨论】:
您是否检查了this 并在您的服务总线端进行了必要的配置设置? Azure Functions guidance 用于非 HTTP 触发器 - 当您的函数应用位于 VNet 中时,您还需要对服务总线资源进行必要的配置。 我的服务总线在标准计划中运行,所以我没有可用的网络选项。而且我不想转向服务巴士高级计划。 我在标准计划中创建了一个测试函数应用程序,以测试服务总线触发的函数应用程序在放置在 VNET 中时的行为。它能够从服务总线中挑选消息。不知道其他功能应用出了什么问题。 【参考方案1】:这主要发生在函数应用和服务总线资源不在同一个 VNET 上时。确保它们在同一个 VNET 上。
由于它在普通功能应用程序中运行良好,在将其部署到 VNET 后应该可以正常运行,如果不是,我们需要在服务总线级别将 IP 或 CIDR 列入白名单。
我们可以在functionapp下找到函数IP。如果我们将功能应用用作高级层,则不需要白名单。
检查这些documentation 以允许访问特定的虚拟网络,还检查此answer 与解决您的问题类似。感谢 MayankBargali。
【讨论】:
以上是关于函数应用无法从 Azure 服务总线获取消息的主要内容,如果未能解决你的问题,请参考以下文章
失败的消息不会从 Azure 服务总线触发函数移动到 DLQ
Azure 函数 - 从 Azure 密钥保管库获取服务总线连接字符串