从 Array 推送到 Azure 队列覆盖消息?[node.JS]

Posted

技术标签:

【中文标题】从 Array 推送到 Azure 队列覆盖消息?[node.JS]【英文标题】:Push to Azure queue overwriting message from Array?[node.JS] 【发布时间】:2021-03-26 04:24:59 【问题描述】:

我有一个数组,其中包含一些我想发送到天蓝色队列的对象。 我有一个简单的数组,其中包含一些数据和一个 for,它通过数组的每个元素并将其推送到队列中。一切都很顺利,但是当我看到队列时,我只能找到数组的最后一个成员,而不是所有对象。

我的代码如下所示:

module.exports = async function (context, myQueueItem) 
var tabdata = []
tabdata =(
housecode:1,car: 2, familymbembers:5,status:"Error",housecode:2,car: 5, familymbembers:4,status:"normal",housecode:3,car: 2, familymbembers:4,status:"Error")


//does some other stuff


   for (let i = 0; i < tabData.length; i++) 
        if(tabData[i].status == "Error")
            context.bindings.outputQueueError = (tabData[i]);

        
        
    
context.done();

如果我尝试在 context.bindings.output 之后打印对象,我可以看到 for 和 if 工作正常(我打印了数组中的 0 和 2 对象),但在队列中我可以看到只有一个具有房屋代码 3 的对象。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

你的问题在于这行代码

context.bindings.outputQueueError = (tabData[i]);

在循环的第一次迭代中,逻辑表达式为真,然后将该值分配给 context.bindings.outputQueueError。然后,在最后一次迭代中,将该值分配给 context.bindings.outputQueueError。

看起来您需要将每个传递表达式的对象发送到迭代块内的天蓝色队列,或者推送到该 for 循环内的数组并将每个对象发送到其他地方的队列。

【讨论】:

你好,我用了另一种方法(发送消息数组),它有效,谢谢你的回答【参考方案2】:

使用消息数组修复

module.exports = function(context) 
    context.bindings.myQueueItem = ["message 1","message 2"];
    context.done();
;

【讨论】:

以上是关于从 Array 推送到 Azure 队列覆盖消息?[node.JS]的主要内容,如果未能解决你的问题,请参考以下文章

顺序处理算法/模式 - Azure 服务总线队列

将结果从 RabbitMQ 队列推送到 CakePHP 前端

从 Laravel(NodeJS)外部推送到 Laravel 队列

读取 Azure 服务总线队列中的所有活动消息

使用azure服务总线,如何将单个消息发布到多个队列?

RabbitMQ消息队列-通过fanout模式将消息推送到多个Queue中