gpt4 book ai didi

node.js - Azure 服务总线失败并出现 NOTFOUND 异常

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:51 24 4
gpt4 key购买 nike

我正在迭代超过 400,000 条 json 消息,这些消息需要从 NodeJS Azure Function 发送到 Azure 服务总线。该函数能够创建主题,并开始发布消息。

它开始循环并发布消息。在发布失败并出现以下错误之前,我看到队列中已有数千个内容:

{ 
Error: getaddrinfo ENOTFOUND ABC.servicebus.windows.net ABC.servicebus.windows.net:443 at errnoException (dns.js:53:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:95:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'ABC.servicebus.windows.net',
host: 'ABC.servicebus.windows.net',
port: '443'
}

我发布消息的代码编写了一条消息,并通过 JS API 推送它。消息正文是一个小的 JSON 对象:

{
"adult":false,
"id":511351,
"original_title":"Nossa Carne de Carnaval",
"popularity":0,
"video":false
}

我的 Azure Function 中将此消息推送到服务总线的方法如下:

function publishNewMovies(context, movies) {
var azure = require('azure');
var moment = require('moment');

var topic = process.env["NewMovieTopic"];
var connectionString = process.env["AZURE_SERVICEBUS_CONNECTION_STRING"];

context.log("Configuring Service Bus.");
return new Promise((resolve, reject) => {
var serviceBusService = azure.createServiceBusService(connectionString);
serviceBusService.createTopicIfNotExists(topic, function(error) {
if (error) {
context.log(`Failed to get the Service Bus topic`);
reject(error);
}

context.log("Service Bus setup.");

// Delay the receiving of these messages by 5 minutes on any subscriber.
var scheduledDate = moment.utc();
scheduledDate.add('5', 'minutes');
context.log("Sending new movie messages.");

var message = {
body: '',
customProperties: {
messageNumber: 0
},
brokerProperties: {
ScheduledEnqueueTimeUtc: scheduledDate.toString()
}
}

for(index = 0; index < movies.length; index += 40) {
message.brokerProperties.ScheduledEnqueueTimeUtc = scheduledDate.add('11', 'seconds').toString();
for(batchIndex = 0; batchIndex < 40; batchIndex++) {
var currentIndex = index + batchIndex;
if (currentIndex >= movies.length) {
break;
}

message.customProperties.messageNumber = currentIndex;
message.body = JSON.stringify(movies[currentIndex]);

serviceBusService.sendTopicMessage(topic, message, function(error) {
if (error) {
context.log(`Failed to send topic message for ${message.body}: ${error}`);
reject(error);
}
})
}
}
});
});
}

这将创建一条消息,该消息在第一次服务总线推送后 5 分钟内可见。然后我在预定时间内批量发送 40 条消息。第一批完成后,我会在 11 秒后安排另外 40 条消息。这是因为将编写另一个 Azure 函数来监听此服务总线主题并发出 3rd 方 API 请求。我的速率限制为每 10 秒 40 条消息。

我已通读 Azure Functions documentation on quotas看起来我可能会达到 10,000 个主题/队列的限制。有了这个限制,人们应该如何将大量消息推送到总线中?当我发送相同的消息时,设置多个 namespace 来解决这个问题似乎是倒退的,只是内容不同 - 它属于同一个 namespace 。我收到的错误并不表明我达到了限制或任何其他情况。听起来好像由于某种原因未能找到实际的服务总线端点。

这个问题的答案是处理分区吗?我找不到有关如何使用 NodeJs 处理分区的文档。他们的大部分 API 文档都是用 C# 编写的,对我来说这并不能很好地转换为 NodeJ。

编辑以显示总线指标

总线指标 enter image description here

主题指标 enter image description here

最佳答案

您能详细说明为什么您实际上创建了这么多主题吗?这: var topic = process.env["NewMovieTopic"];

您可以有 1 个主题,该主题可以获取数百万条消息,然后这些消息将被传输到您也可以添加过滤条件的各个订阅。所以应该不需要那么多话题。

通常,主题、订阅和队列将在管理平面(门户、arm、PS 或 cli)运行时中创建,或者数据操作将是函数、云应用程序、虚拟机,因此服务总线可能可以轻松处理您的卷,除非您有创建这么多主题的具体原因是什么?

关于node.js - Azure 服务总线失败并出现 NOTFOUND 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49268946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com