代理后面带有 ServicueBusTrigger 的 Azure 函数无法正常工作
Azure Function With ServicueBusTrigger Behind Proxy Not working
来自标题 很明显我有一些与代理相关的问题。
- 如果我禁用代理或没有代理的机器,一切似乎都工作正常。
- 当代理和 vpn 启用时如果我尝试通过 servicebustrigger 在 azure 函数中发布消息或接收消息不起作用。
- 对于发布的某些扩展,可以通过创建 ServiceBusClient 并为其配置代理来解决该问题。
- 对于 ServiceBusTrigger,没有配置代理设置的选项,或者至少我不知道。
有什么建议吗?
带有 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
来自标题 很明显我有一些与代理相关的问题。
- 如果我禁用代理或没有代理的机器,一切似乎都工作正常。
- 当代理和 vpn 启用时如果我尝试通过 servicebustrigger 在 azure 函数中发布消息或接收消息不起作用。
- 对于发布的某些扩展,可以通过创建 ServiceBusClient 并为其配置代理来解决该问题。
- 对于 ServiceBusTrigger,没有配置代理设置的选项,或者至少我不知道。
有什么建议吗?
带有 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