代理后面带有 ServicueBusTrigger 的 Azure 函数无法正常工作

Azure Function With ServicueBusTrigger Behind Proxy Not working

来自标题 很明显我有一些与代理相关的问题。

  1. 如果我禁用代理或没有代理的机器,一切似乎都工作正常。
  2. 当代理和 vpn 启用时如果我尝试通过 servicebustrigger 在 azure 函数中发布消息或接收消息不起作用。

有什么建议吗?

带有 Azure Functions 的 NServiceBus 是通过 ServiceBusTriggeredEndpointConfiguration 配置的,它有一个 Transport 属性 类型的 AzureServiceBusTransport。使用 Transport 属性,您应该能够通过启用 WebSockets 来指定 connectivity

这不是一个完整的答案,但将 ;TransportType=AmqpWebSockets 添加到连接字符串理论上应该会导致触发器使用网络套接字。我自己仍在调查这个问题 - 我发现它现在可以成功查看,但最后无法完成读取。

我在启动时配置代理(使用 [assembly: FunctionsStartup(typeof(Startup))] 和从 FunctionsStartup 派生的 class - 参见“Microsoft.Azure.Functions.Extensions”。

我使用以下启动 class 来设置 Amqp Web 套接字传输并使其在代理后面本地工作时为我工作。

using AzureFunctions;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Hosting;
using System;

[assembly: WebJobsStartup(typeof(Startup))]
namespace AzureFunctions
{
    public class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            if (IsLocalDevelopmentEnvironment)
            {
                builder.AddServiceBus(options =>
                {
                    options.TransportType = Azure.Messaging.ServiceBus.ServiceBusTransportType.AmqpWebSockets;
                });
            }
        }

        private bool IsLocalDevelopmentEnvironment => Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT") == "Development";
    }
}

ServiceBusTrigger 使用的 Microsoft.Azure.WebJobs.Extensions.ServiceBus 扩展使用 AzureFunctionsJobHost:extensions:ServiceBus 配置部分构建输入绑定使用的服务总线客户端:ServiceBusHostBuilderExtensions.cs:44

因此,您可以通过在 local.settings.json 文件中设置“AzureFunctionsJobHost:extensions:ServiceBus:WebProxy”属性(或您设置配置的任何其他方式),将客户端配置为使用代理):

"AzureFunctionsJobHost:extensions:ServiceBus:WebProxy": "<proxy address and port>",

此外,如果您的代理不允许您使用 AMPQS 端口 (5671),您可以通过设置 AzureFunctionsJobHost:extensions:ServiceBus:TransportType 属性 到 AmqpWebSockets.

"AzureFunctionsJobHost:extensions:ServiceBus:TransportType": "AmqpWebSockets"

用于测试的环境:

  • 框架:.NET 6 (in-process)
  • Azure 函数版本: v4
  • Microsoft.NET.Sdk.Function: 4.0.1
  • Microsoft.Azure.WebJobs.Extensions.ServiceBus: 5.2.0