ATG调度程序创建预定作业并执行它。如果作业在调度程序的线程中,则其他作业必须等待。我想要做的是使用ATG调度程序来创建作业,传递给队列管理器,以便它一个接一个地执行一个不停止调度程序。所以我想在创建作业的调度程序和执行相同作业的调度程序之间放置一个队列。 可以这样做吗?或者有一种方法,我的所有工作将使用不是调度程序的线程的相同线程?
答案 0 :(得分:0)
听起来您想要将Dynamo Messaging System(又名PatchBay)队列与调度程序结合使用。
有些事情:
MessageSource
将jms消息放入队列中为每个作业确保调度程序不必等待"等待"因为它只是为每个作业创建jms消息。 JobMessageListener
事件的核心组件onMessage
,并从队列中读取作业并将工作委托给另一个服务。 这可以确保作业自动启动,并在使用jms队列时按顺序处理。 JobProcessorService
,它可以解决繁重的问题并处理工作。您没有提到ATG的哪个版本的ATG,但是可以找到实现此目的的说明here。
答案 1 :(得分:0)
如果您使用调度程序通过schedulder.addScheduledJob(...)
方法自行安排作业,则可以控制作业是在其自己的线程还是调度程序线程中执行。 threadMethod
ScheduledJob
属性有三种可能的设置,将在下面的链接中讨论。
ScheduledJob Thread Methods - Documentation Link
基本上,你有:
所以,听起来你想要使用 SEPARATE_THREAD 或 REUSED_THREAD 。
public void doStartService() throws ServiceException
{
ScheduledJob job = new ScheduledJob("hello",
"Prints Hello",
getAbsoluteName(),
getSchedule(),
this,
ScheduledJob.SEPARATE_THREAD);
jobId = getScheduler().addScheduledJob(job);
}
如果您正在创建一个从SchedulableService
或SingletonSchedulableService
扩展的作业,那么您可以将组件的threadMethodString
属性配置为具有{{1}的值}},scheduler
或separate
因此避免上面显示的自定义编码。默认情况下,它设置为reused
。
例如:
reused