JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

万能通用的异步实战方案,设计多线程,mq

wys521 2024-11-19 12:53:15 精选教程 24 ℃ 0 评论

通用异步实战。

今天给大家分享万能通用的异步实战,涉及多线程MQ和数据库的整合。这个demo我也会放到我的java高并发实战课程里面。

首先看这样的一个接口,在这边调用了service里面的方法。现在想让这个方法根据一定的策略进行异步处理,比如就可以在它上面加一个注解,这边就是有一个异步执行的注解,这个里面有一个异步执行策略,还有延迟处理时间,包括业务的描述。

主要看一下异步执行策略,就是枚举类,比如可以先保存数据库,再异步消息处理。比如还可以先同步处理失败,再保存数据库。还可以先异步消息处理,如果处理失败,再保存数据库。比如还可以仅异步消息处理,仅异步线程处理。

这个里面的每一个枚举值都是一种方案,这个肯定就是对应着service,就类似于策略模式。就在这边找到了很多的service,比如就以先异步消息处理处理失败,再保存数据库为例。

这样的方法执行也很简单,就是先把消息放到MQ里面,如果执行成功就直接返回,如果执行失败就把任务放到数据库。保存到数据库之后,数据库就有失败的任务了,这个时候就可以开启定时任务,定时调度去进行重试。

当然这边还有一个异步补偿的定时任务,主要的逻辑在sql里面,就是判断一个小时之前有没有未执行的任务,如果有就对它进行补偿的执行。

这边还整合了MQ,比如这边整合了RabbitMQ,通过这样的方法进行发送消息,在这边通过这个方法进行监听消息。通过这样的绑定关系,在项目启动的时候就可以自动的创建queue以及exchange,并且把队列跟交换机进行绑定。

来测试一下接口,这个里面有一个execute的方法,想让它根据配置的这样的策略进行执行。比如是先保存数据库,再异步消息处理,然后在这边访问一下,可以看到这个OK是立刻就返回了,在这边就有对应的日志输出。比如首先是异步保存数据库,然后发送消息,最终rabbitmq消费消息其实就是执行这样的方法,最终执行成功。

这个项目我也会放到我的Java高并发实战课程里面,如果你有兴趣,左下角可以了解一下。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表