Flowable异步历史消息处理-----RabbitMQ

一.介绍

flowable相比activity,增加了一个新的特性,即异步处理历史数据。

我们在操作流程的过程中都会保存历史数据到不同的历史表中,如果流程数量很多的情况下,同步保存历史数据便会带来一定的性能压力。

flowable给我们提供了一种异步处理的方法,其中这种方式的原理其实就是开启历史定时器,然后定期轮训历史作业,然后解析并将其插入到不同的历史表。

这种方式本质还是使用的线程池以及数据库的轮训处理方式,flowable在6.1.2版本之后引入了消息队列机制来处理历史作业。

JMS被用作传输协议,当然了任何协议都是有效的。

这里我采用RabbitMQ,通过异步消息处理历史数据。

1.不使用轮训数据库的方式,而是采用将消息发到到消息队列,并指示消息作业已经准备ok。

2.历史作业数据与运行数据是在同一个事务中的。这样就可以避免脏数据。

3.Flowable提供了一个消息监听器,这样监听器就可以监听到指定的队列消息并进行处理。比如作业的获取,将其存储到历史表中。

4.如果我们实际项目开发中,不希望将历史数据放置到flowable引擎表中,那我们可以扩展相应的代码,将历史作业以及历史数据存放到其他介质,比如mongodb或者es等搜索引擎。

如果使用这种方式,那么消息监听器可以完全与流程引擎解耦,也就是各做各的事情。

架构示意图如下所示:

 

一.flowable服务端(消息的提供端)

1.引入依赖

<!--flowable工作流依赖-->
<dependency>
 <groupId>org.flowable</groupId>
 <artifactId>flowable-spring-boot-starter-process</artifactId>
 <version>${flowable.version}</version>
</dependency>

<!--jms-->
<dependency>
 <groupId>org.flowable</groupId>
 <artifactId>flowable-jms-spring-executor</artifactId>
 <version>${flowable.version}</version>
</dependency>

<!--mysql依赖-->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>${mysql-version}</version>
</dependency>

<!-- rabbitmq -->
<dependency>
 <groupId>org.springframework.amqp</groupId>
 <artifactId>spring-rabbit</artifactId>
 <version>${amqp.version}</version>
</dependency>

<!-- flowable-dmn-->
<dependency>
 <groupId>org.flowable</groupId>
 <artifactId>flowable-dmn-spring-configurator</artifactId>
 <version>${flowable.version}</version>
</dependency>

<!-- flowable-form-->
<dependency>
 <groupId>org.flowable</groupId>
 <artifactId>flowable-form-spring-configurator</artifactId>
 <version>${flowable.version}</version>
</dependency>


2.配置Config

 

@Configuration
public class FlowableRabbitConfig {


    public static final String EXCHANGE = "mbo-flowable";
    public static final String QUEUE = "mbo-flowable-history";


    /**
     * 配置mysql连接
     * @return
     */
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() {
        return new DataSource();
    }

    /**
     * 事务配置
     * @return
     */
    @Bean
    public PlatformTransactionManager transactionManager() {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource());
        return transactionManager;
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值