我目前正在尝试按照此入门页面使用Azure.Messaging.ServiceBus包。我遇到了一个问题,我会收到以下错误:
Azure.Messaging.ServiceBus.ServiceBusException:'现有连接被远程主机强制关闭。错误代码:连接重置(服务通信问题)。
我知道发生这种情况是因为端口被阻止。为了解决这个问题,我创建了以下内容:
var option = new ServiceBusClientOptions
{
TransportType = ServiceBusTransportType.AmqpWebSockets
};
var client = new ServiceBusClient(connectionString, options);
根据本文档。
这解决了发送者和接收者代码的问题。当 Azure Function 设置使用 ServiceBusQueues 作为触发器时,我的问题仍然出现。我在该文档中看到我可以附加
TransportType=AmqpWebSockets;
添加到连接字符串,这样就可以解决问题。然而,该功能似乎并不存在于较新的 Azure.Messaging.ServiceBus 包中,仅存在于较旧的 Microsoft.Azure.ServiceBus 包中。
是否有一种方法可以在不降级包的情况下为 Azure Function 中的服务总线队列连接字符串分配 TransportType?它当前正在从 local.settings.json 获取连接字符串。
Azure 函数的代码:
[Function("ServiceBusQueueTrigger1")]
public static async void Run([ServiceBusTrigger("someQueueName", Connection = "somebus_SERVICEBUS")] string myQueueItem, FunctionContext context)
{
// some function code
}
似乎附加 TransportType=AmqpWebSockets;将努力解决 Azure Function 的问题。它不适用于发送者/接收者代码,因为它们依赖于 NuGet 包。 Azure 函数没有。
Azure Functions 环境没有 TCP 端口块,因此不需要 WebSocket。使用服务总线队列/主题/订阅从 Azure Functions 发送/接收数据不会受到所使用的其他环境的限制的影响。当系统的其余部分(例如本地)使用 Web 套接字连接到命名空间时,消息将流向您的函数并发送出去,不会出现任何问题。
如果您将 Azure Functions 与 ServiceBusTrigger 结合使用,则可以将其添加到
host.json
以指定 AMQP Web 套接字的使用:
"extensions": {
"serviceBus": {
"transportType": "amqpWebSockets"
}
}
正如其他答案和评论所指出的,在使用较新的软件包版本时,将
TransportType=AmqpWebSockets
附加到连接字符串没有任何效果。