【问题标题】:ATG scheduler/Queue ManagerATG 调度程序/队列管理器
【发布时间】:2014-07-26 00:02:31
【问题描述】:

ATG 调度程序创建调度的作业并执行它。如果作业在调度程序的线程中,则其他作业必须等待。我想要做的是使用 ATG 调度程序来创建作业,传递给队列管理器,以便它一个接一个地执行,而不是一起停止调度程序。所以我想在创建作业的调度程序和执行同一作业的调度程序之间放置一个队列。 这可以做到吗?还是有一种方法可以让我的所有作业都使用不是调度程序线程的同一线程?

【问题讨论】:

    标签: java atg oracle-commerce


    【解决方案1】:

    听起来您想将 Dynamo 消息传递系统(又名 PatchBay)队列与调度程序结合使用。

    类似的东西:

    1. 调度程序运行并使用 MessageSource 将 jms 消息放入每个作业的队列中这确保调度程序不必“等待”,因为它只是为每个作业创建 jms 消息。
    2. 创建和配置一个核心组件JobMessageListener,它实现onMessage 事件并从队列中读取作业并将工作委托给另一个服务。 这可确保作业自动启动并按照使用 jms 队列的顺序进行处理。
    3. 创建和配置核心组件,类似于 JobProcessorService 的内容,负责完成繁重的工作并处理工作。

    您没有提及 ATG 的哪个版本,但是对于 ATG 10.2,可以找到实现此目的的说明here

    【讨论】:

    • 另请参阅answer,它讨论了 ATG 中的同步与异步消息传递。
    【解决方案2】:

    如果您通过schedulder.addScheduledJob(...) 方法自己使用调度程序调度作业,您可以控制作业是在自己的线程中执行还是在调度程序线程中执行。 ScheduledJobthreadMethod 属性具有三种可能的设置,在下面的链接中进行了讨论。

    ScheduledJob Thread Methods - Documentation Link

    基本上,你有:

    • SCHEDULER_THREAD:作业使用调度程序线程运行。
    • SEPARATE_THREAD:调度程序为每次执行的线程创建一个新线程 作业和作业在该线程中运行。
    • REUSED_THREAD:与 SEPERATE_METHOD 相同,只是在作业的多次运行中使用相同的线程。

    所以,听起来您想使用 SEPARATE_THREADREUSED_THREAD

    public void doStartService() throws ServiceException
    {
        ScheduledJob job = new ScheduledJob("hello",
                                            "Prints Hello",
                                            getAbsoluteName(),
                                            getSchedule(),
                                            this,
                                            ScheduledJob.SEPARATE_THREAD);
        jobId = getScheduler().addScheduledJob(job);
    }
    

    如果您要创建一个从SchedulableServiceSingletonSchedulableService 扩展的作业,那么您可以将组件的threadMethodString 属性配置为具有schedulerseparate 或@987654331 的值@ 并因此避免使用上面显示的自定义编码。默认设置为reused

    例如:

    # /my/custom/MyScheduledJob
    $class=my.custom.MyScheduledJob
    $scope=global
    threadMethodString=separate
    

    【讨论】:

    • 这种方法的问题是您必须非常仔细地对其进行编码,以确保您不会跨线程重复任何工作,因为这样您最终会遇到很多争用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2019-01-01
    • 2011-02-11
    相关资源
    最近更新 更多