有没有办法将 BlockingQueue 传递给 Quartz 框架中的作业?我尝试使用 JobDataMap 来传递 BlockingQueue 但这似乎不起作用。这里是相关的代码片段:
JobDetail job = newJob(Jobby.class)
.withIdentity("myJob", "group1")
.usingJobData("buffer", queue)
.build();
也许有人对如何实现这一目标有想法。
有没有办法将 BlockingQueue 传递给 Quartz 框架中的作业?我尝试使用 JobDataMap 来传递 BlockingQueue 但这似乎不起作用。这里是相关的代码片段:
JobDetail job = newJob(Jobby.class)
.withIdentity("myJob", "group1")
.usingJobData("buffer", queue)
.build();
也许有人对如何实现这一目标有想法。
看起来您正在尝试实现生产者/消费者设计模式,其中生产者将工作放入队列中,而消费者使用 Quartz 定期检查该队列。这种设计还不错,但是您的实现将无法正常工作。通过将该队列传递给作业数据,Quartz 将对其进行序列化,并在作业触发时将其反序列化。队列不会通过引用传递,而是通过值(副本)传递。如果您意识到 Quartz 应该在分布式环境中工作,这是可以理解的,其中作业被调度并持久化到一个节点上的数据库中,并在另一个节点上反序列化和执行。
话虽如此,您需要重新评估您的实施。如果您不关心集群和分布,请让您的队列以某种方式在全球范围内可用。您的选择是:
我特别推荐使用spring,jndi也是一个不错的选择。但是如果我们在谈论jndi - 为什么不考虑使用一些轻量级的jms实现而不是 Quartz?您将避免延迟。