首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用prisma避免java.util.concurrent.ThreadPoolExecutor错误

如何使用prisma避免java.util.concurrent.ThreadPoolExecutor错误
EN

Stack Overflow用户
提问于 2020-03-05 01:22:25
回答 1查看 473关注 0票数 4

我目前正在一个大型项目中使用Prisma。当执行一个复杂的查询时,Prisma集群经常会在docker-logs中显示以下错误消息(为了可读性,我修改了这个错误):

代码语言:javascript
复制
    {"key":"error/unhandled","requestId":"local:ck7ditux500570716cl5f8x3r","clientId":"default$default","payload":{"exception":"java.util.concurrent.RejectedExecutionException: Task slick.basic.BasicBackend$DatabaseDef$$anon$3@552b85a4 rejected from slick.util.AsyncExecutor$$anon$1$$anon$2@1d4391f7[Running, pool size = 9, active threads = 9, queued tasks = 1000, completed tasks = 43440]","query":"query ($where: TaskWhereUniqueInput!)
{\n  task(where: $where) {\n    workflow {\n      tasks {\n        id\n        state\n        parentReq\n        frozen\n        parentTask {\n          id\n          state\n        }\n      }\n    }\n  }\n}\n","variables":
"{\"where\":{\"id\":\"ck6twx873bs550874ne867066\"}}",
"code":"0","stack_trace":"java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)\\n
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
...
"message":"Task slick.basic.BasicBackend$DatabaseDef$$anon$3@552b85a4 rejected from slick.util.AsyncExecutor$$anon$1$$anon$2@1d4391f7[Running, pool size = 9, active threads = 9, queued tasks = 1000, completed tasks = 43440]"}}

这是处理大型查询时经常出现的错误。有没有人想出一种方法来配置Prisma或进行内部批处理操作来避免这种并发错误?

EN

回答 1

Stack Overflow用户

发布于 2020-12-09 10:40:52

选项1:

当我在一个有大量数据的循环中运行prisma变异时,我遇到了这个问题,这似乎创建了太多的并发数据库操作。

我的解决方案是限制请求:

代码语言:javascript
复制
thingToLoop.map(() => {
  await new Promise(resolve => setTimeout(resolve, 1000));
  // Prisma operation here. Essentially this just makes the operation wait for one second between each operation.
})

选项2

我读过其他帖子,说你也可以限制并发连接的数量。

请参阅:https://v1.prisma.io/docs/1.25/prisma-server/database-connector-POSTGRES-jgfr/#overview

从本质上讲,当创建太多连接时,这会限制连接的数量。请参阅以下prisma配置作为示例:

代码语言:javascript
复制
PRISMA_CONFIG: |
  managementApiSecret: __YOUR_MANAGEMENT_API_SECRET__
  port: 4466
  databases:
    default:
      connector: postgres
      migrations: __ENABLE_DB_MIGRATIONS__
      host: __YOUR_DATABASE_HOST__
      port: __YOUR_DATABASE_PORT__
      user: __YOUR_DATABASE_USER__
      password: __YOUR_DATABASE_PASSWORD__
      connectionLimit: __YOUR_CONNECTION_LIMIT__
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60531522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档