Azure Service Bus长时间运行的队列

时间:2019-06-18 09:03:32

标签: node.js azure azureservicebus

这是我的新手,也许我弄错了整个概念,我想在容器中有一个永久运行的后台作业,该作业不断接收来自Azure Service Bus的消息。有时将有一个多小时没有消息,并且有时会有消息泛滥。

我已经在Node.JS中设置了总线,如下所示。

现在,当在一定时间内没有消息时,它将解析为一个空数组,如idleTimeoutInSeconds所示。 Azure Service Bus是否打算像我预期的那样习惯? 如果没有,我可以使用其他更合适的方法来解决吗?

我需要可以永久运行并能对发送的新消息做出反应的东西。

编辑:即使很合适,Web服务器在某些情况下也不会做必要的工作。

async function main(){
  const sbClient = ServiceBusClient.createFromConnectionString(connectionString); 
  const queueClient = sbClient.createQueueClient(queueName);
  const receiver = queueClient.createReceiver(ReceiveMode.ReceiveAndDelete);
  try {
    while(true){
        const messages = await receiver..receiveMessages(10);
        console.log("Received messages:");
        console.log(messages.map(message => message.body));
        }
        } finally {
        await sbClient.close();
        }
}

main().catch((err) => {
  console.log("Error occurred: ", err);
});

2 个答案:

答案 0 :(得分:0)

Azure Webjobs可以连续运行并订阅服务总线队列/主题。

我非常确定,即使在一个小时的不活动之后,它仍然会响应新消息。

尽管我确定实践是相同的,但是我只在C#中实现了它,而在nodejs中没有实现。

答案 1 :(得分:0)

您共享的代码似乎正在使用@azure/service-bus SDK的版本1。

尽管您的代码段可以达到目的,但是您可以利用subscribe SDK第7版中提供的@azure/service-bus方法,该方法是专门为您提到的用例设计的(永远接收)。

[相当于版本1中的registerMessageHandler API]

您可以参考使用@azure/service-bus SDK第7版的receiveMessagesStreaming.ts示例代码。

@azure/service-bus的最新版本7.0.0已于最近发布。