如何在请求/响应模式下使用 Azure 存储队列?
How do I use an Azure Storage Queue in a request / response mode?
随着我们将更多 node.js 代码移植到 Azure Functions 中,我们在 Azure 文档中看到使用存储队列是委托处理责任的首选方式,而不是使用 http 请求来调用其他函数。
我们应该为这个委托使用什么 request/response 设计模式?具体来说,如何才能将通过队列发回的响应仅传送到发出请求的函数?
下面是我们想要做的一个例子:
- 请求进入 HTTP 触发函数 A
- 函数 A 将消息放入队列 X(以 JSON 格式),第一个键是唯一的 requestId:"ABC345"
- 函数 A 开始侦听队列 Y 的响应
- 函数 B 将此消息从队列中取出并执行其工作
- 函数 B 将带有工作结果的消息添加到队列 Y 中,请求 ID 为:"ABC345"
- 函数 A 看到此消息的 requestId:"ABC345" 和 returns HTTP 响应
我们怎样才能让函数 A 只接收它正在等待的请求?
getMessage方法好像不能选择性监听某个队列,只能抓取最前面的消息:
getMessage(queue [, options], callback)
另一个角度是,如果我们希望多个工作函数监听队列 X。函数 C 将处理具有 requestType: "query" 的所有请求,而函数 D 将处理所有 requestType: "blob".如果没有这种过滤,我们将为每个 Worker 函数使用一个队列。这也是正确的做法吗?
注意:我们使用的是 node.js,但我假设队列 API 在所有 SDK 中都是等效的。
Azure 队列确实不执行请求-响应。
Http 处理不应等待队列。 Http 消息应该 return 快速(同步,< 1 分钟),而队列用于更长的异步后台处理。如果 Http 正在等待队列,它应该使用 202 long-运行 模式。
考虑:
- 继续使用 Http。您可以移植到 Functions 并保留您的基础
模式。
- 在完全异步的情况下使用队列。所以A排队a
启动 B 和 returns 的消息; A2 监听来自
B.
- 查看 Durable Functions 预览。这允许
同步调用与您想要的完全一样。它在预览中,但是
见 https://github.com/Azure/azure-functions-durable-extension
看起来 Azure 逻辑应用程序是在 request/response 模式中编排多个功能的未来。使用逻辑应用程序,您可以设置一个 HTTP 触发器(以及许多其他触发器),然后使用条件逻辑按顺序设置几个函数 运行:
https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-azure-functions
随着我们将更多 node.js 代码移植到 Azure Functions 中,我们在 Azure 文档中看到使用存储队列是委托处理责任的首选方式,而不是使用 http 请求来调用其他函数。
我们应该为这个委托使用什么 request/response 设计模式?具体来说,如何才能将通过队列发回的响应仅传送到发出请求的函数?
下面是我们想要做的一个例子:
- 请求进入 HTTP 触发函数 A
- 函数 A 将消息放入队列 X(以 JSON 格式),第一个键是唯一的 requestId:"ABC345"
- 函数 A 开始侦听队列 Y 的响应
- 函数 B 将此消息从队列中取出并执行其工作
- 函数 B 将带有工作结果的消息添加到队列 Y 中,请求 ID 为:"ABC345"
- 函数 A 看到此消息的 requestId:"ABC345" 和 returns HTTP 响应
我们怎样才能让函数 A 只接收它正在等待的请求?
getMessage方法好像不能选择性监听某个队列,只能抓取最前面的消息:
getMessage(queue [, options], callback)
另一个角度是,如果我们希望多个工作函数监听队列 X。函数 C 将处理具有 requestType: "query" 的所有请求,而函数 D 将处理所有 requestType: "blob".如果没有这种过滤,我们将为每个 Worker 函数使用一个队列。这也是正确的做法吗?
注意:我们使用的是 node.js,但我假设队列 API 在所有 SDK 中都是等效的。
Azure 队列确实不执行请求-响应。 Http 处理不应等待队列。 Http 消息应该 return 快速(同步,< 1 分钟),而队列用于更长的异步后台处理。如果 Http 正在等待队列,它应该使用 202 long-运行 模式。
考虑:
- 继续使用 Http。您可以移植到 Functions 并保留您的基础 模式。
- 在完全异步的情况下使用队列。所以A排队a 启动 B 和 returns 的消息; A2 监听来自 B.
- 查看 Durable Functions 预览。这允许 同步调用与您想要的完全一样。它在预览中,但是 见 https://github.com/Azure/azure-functions-durable-extension
看起来 Azure 逻辑应用程序是在 request/response 模式中编排多个功能的未来。使用逻辑应用程序,您可以设置一个 HTTP 触发器(以及许多其他触发器),然后使用条件逻辑按顺序设置几个函数 运行:
https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-azure-functions