我们目前正在将消息批量发送到Azure服务总线队列中,并设置scheduledEncodeTimeUtc以将它们按100个块进行调度,间隔一分钟。我可以在门户上的服务总线资源管理器上的消息属性中看到这一设置。但是,我的Azure函数仍在处理到达队列的这些消息,不尊重预定的排队时间。在JavaScript和node中没有太多这样做的例子,我假设我设置错了什么?相关的消息代码发送
const { app, output } = require('@azure/functions');
const { ServiceBusClient } = require('@azure/service-bus');
const { DefaultAzureCredential } = require("@azure/identity");
const moment = require('moment');
const { getAllEmployeeXRefs } = require('../util/GetAllEmployeeXRefs.js');
const credential = new DefaultAzureCredential();
const serviceBus = new ServiceBusClient(process.env["ServiceBusConnection__fullyQualifiedNamespace"],credential);
const serviceBusSender = serviceBus.createSender("cacheemployeequeue");
function chunkArrayInGroups(arr, size) {
var myArray = [];
for(var i = 0; i < arr.length; i += size) {
myArray.push(arr.slice(i, i+size));
}
return myArray;
}
app.http('CacheAllEmployees', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: async (request, context) => {
employeeXrefsToCache = await getAllEmployeeXRefs(filter);
const groupsOfMessages = chunkArrayInGroups(employeeXrefsToCache.Data, 100);
for (let i=0;i<groupsOfMessages.length;i++) {
const batchOfMessages = groupsOfMessages[i];
const messagesToPush = [];
for (chunk in batchOfMessages) {
const message = {
body: batchOfMessages[chunk],
contentType: "application/json",
scheduledEnqueueTimeUtc: moment().add(1*i, 'minutes').format('M/D/YYYY H:mm:ss A')
};
messagesToPush.push(message);
}
await serviceBusSender.sendMessages(messagesToPush);
}
return { body: `added ${employeeXrefsToCache.Data.length} to queue` }
}
});
字符串
在浏览器消息看起来像这样(这是正确的):
的数据
但是消费函数在预定时间之前得到它们,就像我们加载它们一样快。
1条答案
按热度按时间uqzxnwby1#
字符串
您没有设置消息以UTC格式排队的日期和时间,而是设置本地时间。因此,在不久的将来,没有以正确的UTC格式表示的内容将被解释为过去的日期/时间,并将立即排队。moment.js文档应该有助于找到正确的格式。