繁体   English   中英

Azure 服务总线将获取请求添加到队列

[英]Azure Service Bus add get requests to queue

所以我在设计队列时遇到了很多问题,我的 API 应用程序收集数据需要调用另一个端点,所以为了避免太多请求,我想将这些请求放入 Azure 服务总线队列,但据我所知,这是一个很好的方法用于更新/插入数据,但是在读取数据时,我无法理解如何在处理数据后将其返回到前端(UI)。

我想出一个想法,当前端请求数据时,我将它放入队列并将消息ID返回到前端,然后在队列中我将使用 Azure Function 来调用我的服务端点,它将获取数据并作为 Z466DEEC76ECDF24FCA5646D 插入到我的数据库中.

请求完成后,我会将请求状态更改为已完成,并且前端将每 5-10 秒检查一次消息 state 或使用 SignalR 进行实时检查。

有没有比我上面提到的更好的解决方案? 我认为它太复杂了,数据冗余可能是个问题。

提前致谢!

我正在尝试为繁重的获取请求创建一个队列

web 请求本质上是同步操作。 持久消息传递是异步的。 将两者混合需要弥合差距,这绝非易事。 轮询并不理想,因为随着客户端数量的增加,它会对您的 web 服务器征税。 SignalR 是回调需要知道结果的特定客户端的更好选择。

这个解决方案的另一面是以我们更新的方式构建客户端,或者计算结果是最终的而不是立即的。

当发布者发送的消息多于接收者可以处理的消息并且您希望将这两个实体解耦以使接收者不会被请求淹没时,队列特别有用。 如果您的目标是减慢到达您正在调用的另一个端点的请求数量,同时保持 API 的用户继续触发请求的可能性,那么您描述的过程是处理这种情况的标准方法。 这是一个示例插图: 在此处输入图像描述 假设您的 API 允许用户发布作业,您创建一个 UUID 并将其发送回用户/GUI,并将消息排入 Azure 服务总线。 如果要强制执行 FIFO 处理,请确保使用 sessions On the receiver end you add an Azure Function with a service bus trigger which calls your other endpoint (you can control the maximum number of instances your Azure Function can scale to by setting WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT to avoid overwhelming your other endpoint). 如果另一个端点处理了请求并做出响应,您将结果存储在您选择的数据库中,并将 Azure 服务总线中的消息标记为完整。 如果您使用 CosmosDB,您可以利用更改提要功能来侦听新条目并将它们发送到 WebSocket 服务器,该服务器维护与用户的开放连接。 请记住,WebSocket 连接可能会意外关闭,因此最好为用户提供一个 URI,以便在他们发布作业后查找结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM