首页 文章

如何在请求/响应模式下使用Azure存储队列?

提问于
浏览
1

当我们将更多node.js代码移植到Azure Functions时,我们在Azure文档中看到使用存储队列的引用是委派处理责任而不是使用http请求来调用其他函数的首选方法 .

我们应该为这个委托使用什么样的请求/响应设计模式?具体来说,如何通过队列发回的响应仅传递给发出请求的函数?

这是我们想要做的一个例子:

  • 请求进入HTTP触发器功能A.

  • 功能A将消息放入队列X(采用JSON格式),第一个键是唯一的requestId:"ABC345"

  • 功能A开始侦听队列Y以获取响应

  • 函数B使此消息出列并执行其工作

  • 功能B将带有工作结果的消息与requestId一起添加到队列Y中:"ABC345"

  • 函数A使用requestId:"ABC345"看到此消息并返回HTTP响应

我们怎样才能让函数A只获取它正在等待的请求?

getMessage方法似乎无法有选择地侦听队列,只能抓取最顶层的消息:

getMessage(queue [, options], callback)

另一个角度是如果我们想要多个Worker函数来侦听Queue X.函数C将处理所有具有requestType:“query”的请求,而Function D将处理所有requestType:“blob” . 没有这个过滤,我们将为每个Worker函数使用一个队列 . 这也是正确的方法吗?

注意:我们're using node.js but I' m假设队列API 's are equivalent across all SDK' .

2 回答

  • 0

    Azure队列实际上不执行请求 - 响应 . Http处理不应该等待队列 . Http消息应该快速返回(同步,<1分钟),而队列用于更长的异步后台处理 . 如果Http在队列上等待,它应该使用202长时间运行的模式 .

    考虑:

    • 继续使用Http . 您可以移植到函数并保留基础模式 .

    • 在完全异步的情况下使用队列 . 因此,A将消息排队以启动B并返回; A2听取了B的回复 .

    • 查看耐用功能预览 . 这允许同步调用完全符合您的要求 . 它在预览中,但请参阅https://github.com/Azure/azure-functions-durable-extension

  • 0

    看起来Azure Logic Apps是在请求/响应模式中编排多个功能的未来 . 使用逻辑应用程序,您可以设置HTTP触发器(以及其他许多应用程序),然后设置多个函数以使用条件逻辑顺序运行:

    https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-azure-functions

相关问题