我是 Quartz Scheduler 框架的新手。我们使用quartz 2.3.2 来调度作业。我有大约一百万个预定的工作,这些工作有不同的频率。但大多数情况下,我每分钟都会触发 6000-7000 次。这些工作在计算方面非常轻,它们只是通过兔子发布消息。我正在使用 postgres 数据库来保存这些作业。我有一组调度程序服务实例来处理规模。
我将所有计划作为 crontriggers,并将失火策略设置为“MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY”。
石英配置:
spring:
application:
name: my-scheduler-service
quartz:
job-store-type: jdbc
jdbc:
initialize-schema: never # Let Flyway handle initialization
properties.org.quartz:
scheduler:
batchTriggerAcquisitionMaxCount: 600
instanceName: JobScheduler
instanceId: AUTO
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 600 # Todo: determine appropriate size here
threadPriority: 5
jobStore:
maxMisfiresToHandleAtATime: 400
acquireTriggersWithinLock: true
isClustered: true
driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
resources:
global:
enabled: true
url:
hikari:
poolName: GlobalDBPool
minimumIdle: 20
maximumPoolSize: 50
问题
我可以做哪些事情来提高石英性能?
这些任务是同时执行的吗?如果是并发执行,每个任务执行都需要与数据库建立连接,根据你的描述,“但大多数情况下我每分钟都会触发6000-7000个触发器”,我建议增加数据库连接池中配置的连接数。