【发布时间】:2021-04-14 06:59:44
【问题描述】:
我们已经构建了一个微服务架构,但遇到了一个问题,即发送到总线的消息太大。 (自从迁移到 Azure 服务总线后发现,因为与 RabbitMQ 4MB 相比,这只允许 256KB)
我们有一个如下图的设计。我们正在努力处理返回的数据。
一个例子是执行搜索并返回多个结果时。
逐步完成我们当前的流程:
- Web 客户端向 Web Api 发送 http 请求。
- Web api 然后将适当的消息放到总线上。 (Web api 以 Accepted 响应响应客户端)
- 微服务收到此消息。
- 微服务在其数据库中查询匹配搜索条件的记录。
- 从数据库返回的结果。
- 一条 SearchResult 消息被添加到总线。 (这包含结果)
- 我们的响应微服务正在侦听此 SearchResult 消息。
- 然后响应微服务发布到我们的 SignalR api。
- SignalR Api 将结果发送回 Web 客户端。
我的问题是,以这种方式设计时,我们如何处理大型结果集?如果不可能,应该如何更改设计以处理大型结果集?
我知道我们可以对结果进行分页,但即便如此,一个结果也可能超过 256KB 的限额,例如文档或特别大的对象。
【问题讨论】:
-
您可以选择返回文件(doc、pdf 等)的链接,而不是在用户可以选择打开的 Web 客户端中。
-
问题在于大型数据集,我可以看到链接可能适用于文档。但即便如此,我如何获得该链接,因为唯一的客户端连接是通过 WebApi 而不允许直接向每个微服务发出 http 请求。通过这种设计,我似乎必须对总线做出响应,当允许如此少量的数据时,这将不起作用。必须有一些模式/解决方案。
标签: signalr microservices message-queue