我有一个 Azure Function App,它处理来自 Azure 服务总线主题的一些消息。我有一些消息传递给 ASB,并且有一些消息来自我的主题订阅。但是,当我在本地运行指向该特定订阅的应用程序时,它仍然不会被触发。我确实已经使用所有连接字符串正确配置了我的应用程序。您建议如何诊断这个问题?
仅供参考:我在本地设置中配置了所需的参数。
connection
属性的 ServiceBusTrigger
属性,该属性应引用 ServiceBusConnectionString
。local.settings.json
中为 azure 的本地和应用程序设置提供相同的名称。 [FunctionName("ServiceBusQueueTriggerCSharp")]
public static void Run(
[ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")]
string myQueueItem,
Int32 deliveryCount,
DateTime enqueuedTimeUtc,
string messageId,
ILogger log)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
log.LogInformation($"EnqueuedTimeUtc={enqueuedTimeUtc}");
log.LogInformation($"DeliveryCount={deliveryCount}");
log.LogInformation($"MessageId={messageId}");
}
如果您在 Visual Studio 中本地开发 Azure Function,并且未触发
ServiceBusTrigger
,请尝试在项目命令行参数中设置 --verbose
标志。如果您随后看到此错误:
System.Private.CoreLib:连接尝试失败,因为 关联方在一段时间后未做出适当回应,或 建立的连接失败,因为连接的主机未能 回应。错误代码:超时(服务通信问题)。
这是一个连接问题,可能是公司防火墙。尝试将其添加到
host.json
:
"extensions": {
"serviceBus": {
"transportType": "amqpWebSockets"
}
}
值得注意的是,在旧版本的服务总线包中,可以将 TransportType=AmqpWebSockets 添加到连接字符串中。在较新的软件包中(我使用的是 Azure.Messaging.ServiceBus 7.17.3),这不再起作用,因此,如果您在升级后开始看到此问题,这可能就是原因。