`

OFBiz多实例中JobManager的相关配置

阅读更多


OFBiz中的job相关的业务还是比较重要的,异步的service、eca已经任务计划都是通过这个来实现和调度的。

 

但是如果部署了2个OFBiz实例的话,就会出现冲突,每个实例都认为那些job是需要自己执行的,所以需要修改一些配置文件来达到这样的目的。

  • serviceengine.xml
    这个文件正在framework/service/config/serviceengine.xml,找到以下代码

<!-- Thread pool configuration (max/min threads, uses to live and time to live) -->
<thread-pool send-to-pool="pool"
    purge-job-days="4"
    failed-retry-min="3"
    ttl="18000000"
    wait-millis="750"
    jobs="10"
    min-threads="5"
    max-threads="15"
    poll-enabled="true"
    poll-db-millis="20000">
    <run-from-pool name="pool"/>
</thread-pool>
 

send-to-pool="pool"这里的pool改成其他名字,比如pool1、pool2,将run-from-pool name="pool"改成和上面一样的

  • general.properties
    这个文件在/framework/common/config/general.properties,将unique.instanceId=ofbiz1的值改成不一样的,比如2个实例分别叫做ofbiz1、ofbiz2

 

在上面的配置文件配置好以后,在配置定时任务的时候,pool这个输入框填写你想让哪个ofbiz实例去运行这个服务,如A服务让pool1运行,B服务让pool2运行

 

在serviceengine配置中,pool可以简单的理解为服务运行池,每个实例在任务调度的时候,run-from-pool这个属性的值会被读出来,所以每个实例只会去跑自己的服务,所以不会有冲突。

 

原先我以为 instanceId 是在job业务中是区分不同实例运行的标记,原来不是,通过以下代码来解读

//updateFields 是JobSandBox的字段,runByInstanceId=哪个实例跑的这个service,statusId=状态;SERVICE_QUEUED就是队列中
public static final Map<String, Object> updateFields = UtilMisc.<String, Object>toMap("runByInstanceId", instanceId, "statusId", "SERVICE_QUEUED");
List<EntityExpr> expressions = UtilMisc.toList(EntityCondition.makeCondition("runTime", EntityOperator.LESS_THAN_EQUAL_TO,
        UtilDateTime.nowTimestamp()), EntityCondition.makeCondition("startDateTime", EntityOperator.EQUALS, null),
        EntityCondition.makeCondition("cancelDateTime", EntityOperator.EQUALS, null),
       
//这里可以看到,只查询了runByInstanceId==null的任务
EntityCondition.makeCondition("runByInstanceId", EntityOperator.EQUALS, null));

// limit to just defined pools
List<String> pools = ServiceConfigUtil.getRunPools();
List<EntityExpr> poolsExpr = UtilMisc.toList(EntityCondition.makeCondition("poolId", EntityOperator.EQUALS, null));
//pools 是配置文件里面的run-from-pool,也就是读出来当前实例需要执行的任务
for (String poolName: pools) {
 poolsExpr.add(EntityCondition.makeCondition("poolId", EntityOperator.EQUALS, poolName));
}

// make the conditions
EntityCondition baseCondition = EntityCondition.makeCondition(expressions);
EntityCondition poolCondition = EntityCondition.makeCondition(poolsExpr, EntityOperator.OR);
EntityCondition mainCondition = EntityCondition.makeCondition(UtilMisc.toList(baseCondition, poolCondition));

// we will loop until we have no more to do
boolean pollDone = false;

while (!pollDone) {
    synchronized (this) {
        //将一些字段的值修改了,保存
        gator.storeByCondition("JobSandbox", updateFields, mainCondition);
        //重新读取一遍
        List<GenericValue> jobEnt = delegator.findByAnd("JobSandbox", updateFields, order);
       
    }
}

 

所以,这一小块的业务就是

  1. 用户定义一个service 由 哪个 pool 来执行

  2. 该 pool 通过 run-from-pool 这个来查询属于自己需要执行的service

  3. 在查询到任务之后,把 runByInstanceId 字段打上自己的 InstanceId ,表示这个任务已经被我认领,其他的实例不会再读取到这个任务了

 

大概业务就是这么多了,相关的代码在
framework/service/src/org/ofbiz/service/job/JobManager.java
framework/service/src/org/ofbiz/service/job/JobInvoker.java

1
1
分享到:
评论

相关推荐

    ofbiz入门实例(jiasudu制作)

    8. **国际化与本地化**:如何在Ofbiz中实现多语言支持和区域适应性。 9. **扩展与定制**:了解Ofbiz的模块化设计,如何根据需求扩展和定制现有功能。 10. **源码阅读技巧**:学习如何阅读和理解Ofbiz的源代码,这...

    ofbiz安装与配置

    Ofbiz 安装与配置指南 Ofbiz 是一个基于 Java 的开源企业级电子商务平台,提供了强大的电子商务解决方案。为了帮助初学者快速上手 Ofbiz,我们将详细介绍 Ofbiz 的安装与配置过程。 环境搭建 在开始安装 Ofbiz ...

    一个简单的ofbiz的实例

    别人写的一个ofbiz的一个简单的例子,希望对大家有用,顺便挣点儿积分!

    ofbiz电商框架hello与皮肤定制实例

    在本文中,我们将深入探讨基于Apache OFBiz的电商框架中的"Hello"实例和皮肤定制。Apache OFBiz是一个全面的企业级开源电子商务解决方案,它提供了一系列工具和服务,帮助开发者构建复杂的在线业务系统。在这个实例...

    Ofbiz10.04改用mysql数据库配置

    在Ofbiz 10.04版本中,使用MySQL数据库进行配置可以提供高效且成本效益的数据存储解决方案。以下是详细的步骤和注意事项: ### Step1:创建数据库 首先,在MySQL服务器上创建一个新的数据库,例如名为`ofbiz10`。这...

    ofbiz 教程_配置ofbiz

    ofbiz的获取与部署,主要用到了gradle 和 eclipse,注意:cmd部署时,需要一个较好的网络环境以下载gradle

    OFBiz-alipay 配置文档

    本文将详细介绍如何在OFBiz中配置Alipay,以确保顺利进行电子商务交易。 1. **安装和设置OFBiz** 在开始配置Alipay之前,你需要确保已经正确安装并运行了OFBiz。这包括下载OFBiz的源代码,配置数据库连接,以及...

    ofbiz 数据模型 中文手册

    数据模型手册中还提及了事务时间戳(TX_STAMP)字段,这是OFBiz特有的时间戳字段,用来记录与事务相关的创建时间和最后更新时间,用以保证数据的一致性和追踪数据变化历史。 在使用手册时,读者需要注意文档可能...

    ofbiz快速入门实例

    Apache OFBiz全称是The ApacheOpen For Business Project。是开放的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新的J2EE/XML规范和技术标准,构建大中型企业级、快平台、跨数据库、跨应用服务器的...

    ofbiz学习笔记(自学整理)

    文档中提供的"新建 Microsoft Word 文档 (2).docx"和"新建 Microsoft Word 文档.docx"可能是详细的学习笔记或者教程,涵盖了Ofbiz的基础概念、配置步骤、实例分析等内容。建议首先阅读这些文档,以便对Ofbiz有一个...

    eclipse如何配置ofbiz下的debug

    配置Eclipse来调试OFBiz项目是开发者日常工作中的一项重要任务。以下将详细介绍如何在Eclipse中配置OFBiz的调试环境。 首先,我们需要确保已经正确安装了Eclipse IDE和OFBiz项目。Eclipse可以从官方网站下载,选择...

    WIN7上安装Ofbiz 数据库 postgresql

    在本文中,我们将详细介绍如何在Windows 7操作系统上安装OFBiz企业应用框架,并配置PostgreSQL作为其数据库。OFBiz是一个开源的企业级应用平台,而PostgreSQL是一个强大的对象关系型数据库管理系统,它们共同为企业...

    ofbiz中文技术文档

    3. **模块详解**:Ofbiz包含的产品管理、订单处理、库存控制等模块的使用方法和配置指南,可能都会在文档中一一阐述。 4. **API与服务**:对于开发者而言,了解Ofbiz提供的API和服务至关重要。文档可能会涵盖如何...

    Ofbiz的中文问题及相关设置

    通过对MySQL的配置和Ofbiz的数据连接配置,可以有效地解决Ofbiz中的中文显示问题。同时,为了确保整个系统的中文支持效果,还需关注前端页面和后台管理界面的中文显示情况。通过上述步骤,可以实现一个较为完善的...

    Ofbiz框架中的事务解析.pdf

    总的来说,Ofbiz通过集成JTA和相关的事务管理组件,如Tyrex,提供了对分布式事务的支持,确保了在处理多资源操作时的数据一致性。通过适当的配置和代码实践,开发者可以充分利用这些特性来构建可靠的、事务安全的...

Global site tag (gtag.js) - Google Analytics