【发布时间】:2020-07-20 19:13:03
【问题描述】:
我正在构建一个服务器发送事件端点,它将在很长一段时间内(1 小时以上)保持打开的连接,并持续实时发送事件。我正在使用响应式 Mongo 在所有应用程序实例之间共享所有数据库更新。据我在每个 HTTP 请求上看到的,一个新的 Mongo 连接是打开的。因为数据库连接池是有限的,所以这个不卖。使用默认设置在 500 个 http 请求(500 个打开的 SSE http 连接 => 500 个 DB 连接)时开始崩溃。
如何使用 Tailable 查询使其可扩展以处理每个实例 50000 多个并发 http 请求?奇怪的是,我没有在网上找到任何关于这个问题的信息。 java mongo 驱动程序中是否有内置功能可以在一个连接上共享查询?
简单地说,这是我正在测试的代码:一个简单的 GET 端点,它从 Tailable MongoDB 查询中返回一个 Flux 记录:
//controller endpoint
@GetMapping(value = "location/{id}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
Flux<Location> getLocationById(@PathVariable String id) {
return locationsRepository.findById(id)
}
和
//repository
@Repository
public interface LocationsRepository extends ReactiveCrudRepository<Location,String> {
@Tailable
Flux<Location> findById(String id);
}
Mongo 有默认配置,当然location 是一个索引上限集合。
【问题讨论】:
标签: mongodb scale spring-webflux reactive