使用 SignalR 进行微服务设计

Microservice Design with SignalR

我们已经构建了一个微服务架构,但是 运行 遇到了一个问题,即发送到总线的消息太大。 (自移动到 Azure 服务总线后发现,因为与 RabbitMQ 4MB 相比,这只允许 256KB)

我们有如下图的设计。我们苦苦挣扎的地方是返回的数据。

一个例子是执行搜索并返回多个结果。

逐步完成我们当前的流程:

  1. Web 客户端向 Web 发送一个 http 请求 Api。
  2. Web api 然后将适当的消息放到总线上。 (Web api 以已接受的响应响应客户端)
  3. 微服务接收到这条消息。
  4. 微服务在其数据库中查询符合搜索条件的记录。
  5. 从数据库返回的结果。
  6. SearchResult 消息已添加到总线。 (这包含结果)
  7. 我们的响应微服务正在侦听此 SearchResult 消息。
  8. 响应微服务然后发布到我们的 SignalR api。
  9. SignalR Api 将结果发送回 Web 客户端。

我的问题是,以这种方式设计时,我们如何处理大型结果集?如果不可能,应如何更改设计以处理大型结果集?

我知道我们可以对结果进行分页,但即便如此,一个结果也可能超过 256KB 的限额,例如一份文档或一个特别大的对象。

有两种方式:-

  1. 使用类似 Kafka 的系统,支持大尺寸消息。
  2. 如果您不能采用第一种方法(从您的问题中可以看出),那么微服务可以为响应服务放置两种类型的消息 (1.) 如果尺寸较小,则放置完整的消息并 (2.) 如果大小超出支持范围,则将包含 link 的消息放入具有结果的 Azure 存储 Blob 基于消息,响应服务可以得到正确的结果,return 与客户端相同。