【问题标题】:Azure Service Bus long running queueAzure 服务总线长时间运行队列
【发布时间】:2020-12-14 17:19:17
【问题描述】:

我是新手,也许我把整个概念弄错了,我想在一个容器中有一个永久运行的后台作业,它不断地从 Azure 服务总线接收消息。有时会超过一个小时没有消息,有时消息会泛滥成灾。

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

现在,当在一定时间内没有消息时,将解析为空数组,如 idleTimeoutInSeconds 所示。 Azure 服务总线是否旨在像我预期的那样使用? 如果没有,我可以用更合适的方法来解决这个问题吗?

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

编辑: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);
});

【问题讨论】:

  • Azure Functions 浮现在脑海中,因为它专为消息流可变的场景量身定制。此外,您不必担心规模。

标签: node.js azure azureservicebus


【解决方案1】:

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

我很确定,即使在一个小时不活动之后,它仍然会在此之后回复新消息。

我只在 C# 中实现了它,而不是 nodejs,尽管我确信实践是相同的。

【讨论】:

    【解决方案2】:

    您分享的代码似乎使用的是@azure/service-bus SDK 的第 1 版。

    虽然您的代码 sn-p 可能达到目的,但您可以利用 @azure/service-bus SDK 版本 7 中提供的 subscribe 方法,该方法专为您提到的用例(永久接收)而设计。

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2018-04-01
      • 2013-08-19
      • 2015-06-08
      相关资源
      最近更新 更多