小编Lin*_*yen的帖子

R2DBC - PostgreSQL - 无法交换消息,因为超出了请求队列限制

图书馆:

\n
    \n
  1. r2dbc-postgresql-0.8.6.RELEASE
  2. \n
  3. r2dbc-pool-0.8.5.RELEASE
  4. \n
  5. r2dbc-spi-0.8.3.RELEASE
  6. \n
  7. postgresql-42.2.18
  8. \n
  9. 项目清单
  10. \n
\n

问题:\n我尝试使用 R2DBC (PostgreSQL) 批量插入,代码如下:

\n
@Override\npublic Flux<Long> test(List<User> users) {\n    return Mono.from(connectionFactory.create())\n    .flatMapMany(c -> Mono.from(c.beginTransaction())\n        .thenMany(Flux.fromIterable(users)\n        .map(u -> {\n            return Flux.from(c.createStatement("INSERT INTO public.users(name, age, salary) VALUES ($1, $2, $3)").returnGeneratedValues("id")\n                .bind(0, u.getName())\n                .bind(1, u.getAge())\n                .bind(2, u.getSalary()).execute());\n        })\n        .flatMap(result -> result)\n        .map(result -> result.map((row, meta) -> {\n            return row.get("id", Long.class);\n        }))\n        .flatMap(Flux::from)\n        .delayUntil(r -> c.commitTransaction())\n        .doFinally((st) -> c.close())));\n}\n
Run Code Online (Sandbox Code Playgroud)\n

该代码将执行语句将用户插入数据库,然后获取生成的用户 ID。如果用户列表小于或等于 255,以上代码将按预期工作。当用户列表大于 255(256~)时,会出现以下异常:

\n
[5b38a8c6-2] There was an …
Run Code Online (Sandbox Code Playgroud)

postgresql spring-webflux spring-data-r2dbc r2dbc r2dbc-postgresql

5
推荐指数
1
解决办法
3415
查看次数