kotlin - Ktor-Kotlin 中的 Quartz 调度器运行在 Kubernetes 集群的所有 Pod 上
问题描述
我是 Quartz 的新手,我在 KTOR 应用程序中使用 Quartz 2.3.2。此应用程序将使用 Kubernetes 部署在集群中运行。
我的要求是仅在此 kubernetes 框架的一个实例/pod 中运行调度程序
我使用下面的代码在 kubernetes 集群中运行quartz
但下面的代码在 Kubernetes 集群的所有 Pod 上运行。如何只在一个实例上运行?
object SchedulerMain {
fun schedulerTest(config: DBConfig) {
DBConnectionManager.getInstance().addConnectionProvider(
"myDs",
HikariCpPoolingConnectionProvider(
"org.postgresql.Driver",
config.readerUrl.toString(),
config.username,
config.password,
10,
"SELECT * FROM table;"
)
)
val schedFact: DirectSchedulerFactory = DirectSchedulerFactory.getInstance()
try {
val jobStore = JobStoreTX()
jobStore.setIsClustered(true)
jobStore.clusterCheckinInterval = 20000
jobStore.tablePrefix = "schema.qrtz_"
jobStore.misfireThreshold = 60000
jobStore.driverDelegateClass = "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"
jobStore.dataSource = "myDs"
val simpleThreadPool = SimpleThreadPool()
simpleThreadPool.threadCount = 5
schedFact.createScheduler(
"TestScheduler", "AUTO", simpleThreadPool, jobStore
)
val sched: Scheduler = schedFact.getScheduler("TestScheduler");
val jobA: JobDetail =
JobBuilder.newJob(JobA::class.java).withIdentity("jobA", "group2").storeDurably()
.build()
val triggerA: Trigger =
TriggerBuilder.newTrigger().withIdentity("triggerA", "group2").startNow()
.withPriority(15).withSchedule(
SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(40)
.repeatForever()
).build()
if (!sched.checkExists(jobA.key)) {
sched.scheduleJob(jobA, triggerA);
}
sched.start()
} catch (e: SchedulerException) {
e.printStackTrace()
}
}
}
更新: 我截断了所有石英表并启动了 kubernetes 集群,然后它按预期在单个实例上运行。然后我停止了 Kubernnetes 集群并在不截断表的情况下重新启动,调度程序在所有 pod 上启动
解决方案
Quartz
在集群模式下以某种方式运行,即所有工作在节点之间平衡以分配负载。为什么您希望调度程序仅在集群的一个节点上工作?
如果您希望您的作业非并发执行,@DisallowConcurrentExecution
请在您的作业类上使用。
推荐阅读
- css - 引导边距类不适用于按钮
- python - 在带有两个迭代器的 map 中使用 sum
- flutter - 颤振:如何在页面前面添加加载(ios样式)?
- c# - 如何在 C# 中创建 Matlab 的单元结构?
- netsuite - NetSuite - 在销售订单“打印 PDF”表单上隐藏项目组的组件
- sql - ClickHouse:如何正确存储 JSON 数据?
- blazor - 使用默认占位符字符串向 InputSelect 添加验证
- string - 如何在打字稿中编写字符串正则表达式以获取“href”值?
- snowflake-cloud-data-platform - 没有虚拟仓库的任务:查询失败还是任务没有启动?
- java - Android Studio:每当我尝试运行它时,应用程序就会安装,但一旦启动它就会崩溃