Flowable 知识点

1、多租户

Flowable多租户有三种实现方式:

  a、原始模式:多个flowable执行引擎,每个引擎对应不同的数据库

  b、共享模式:共用一个flowable引擎和一个数据库,不同租户用 TenantId 字段进行区别(数据库表中多了一个TenantId字段)。

runtimeService.createProcessInstanceQuery()
        .processInstanceTenantId("tenant1")
        .list();

repositoryService.createDeployment()
        .addClasspathResource("...")
        .tenantId("tenant1")
        .deploy();

 

  c、多Schema模式:一个flowable引擎,每个用户一个数据库的Schema,做到数据库层面分离。

config = new MultiSchemaMultiTenantProcessEngineConfiguration(tenantInfoHolder);

config.setDatabaseType(MultiSchemaMultiTenantProcessEngineConfiguration.DATABASE_TYPE_H2);
config.setDatabaseSchemaUpdate(MultiSchemaMultiTenantProcessEngineConfiguration.DB_SCHEMA_UPDATE_DROP_CREATE);

config.registerTenant("tenant1", createDataSource("jdbc:h2:mem:flowable-tenant1;DB_CLOSE_DELAY=1000", "sa", ""));
config.registerTenant("tenant2", createDataSource("jdbc:h2:mem:flowable-tenant2;DB_CLOSE_DELAY=1000", "sa", ""));
config.registerTenant("tenantN", createDataSource("jdbc:h2:mem:flowable-tenantN;DB_CLOSE_DELAY=1000", "sa", ""));

processEngine = config.buildProcessEngine();

 

2、异步节点

异步节点的真正含义不是 上述两个任务分在两个线程中单独执行,

而是在执行 上图中的任务1前,开启一个数据库事务,创建一个执行下一操作的Job,然后就关闭数据库事务。

再启动一个另外的事务,执行这个Job,执行完后,并将流程状态变更为执行一下操作,此时再关闭该事务。

流程就流转到下一个节点。

 

异步节点的核心在于:新开启了事务,然后通过Job去完成操作。

具体好处就是:可恢复。

如果是同步节点,在执行该节点任务时,如果抛出了异常(因为网络异常等等意外因素),流程就会回滚到用户提交前的状态,用户就得再填写一次数据,再提交流程(不管是否需要再填写一次数据,用户总会感知到系统出了问题)。

如果是异步节点,则是先创建个Job,用户那边已经得到流程提交成功的明确答复了。然后系统再执行这个Job,出错了,就再次尝试执行(默认是三次),还不行则进入死信表,还可以手动或自动重新恢复执行。

 

关于异步节点的详细解说可以参看:Demystifying the Asynchronous Flag

 

posted on 2018-10-15 11:41  HB1  阅读(2717)  评论(0)    收藏  举报

导航