JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java高并发实战课程:万能通用的异步实战

wys521 2024-11-19 12:52:03 精选教程 20 ℃ 0 评论

通用异步实战。

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

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

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

这个里面的每一个枚举值都是一种方案,肯定就是对应着service,就类似于策略模式。就在这边找到了很多的设备,比如就以先一步消息处理失败,再保存数据库为例。这样的方法执行很简单,先把消息放到MQ里面,如果执行成功就直接返回,如果执行失败就把任务放到数据库。

保存到数据库之后,数据库就有失败的任务了,这个时候就可以开启定时任务,定时调度去进行重试。当然这边还有一个异步补偿的定时任务,主要的逻辑在搜索里面,就是判断一个小时之前有没有未执行的任务,如果有就对它进行补偿的执行。

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

来测试一下接口,这个里面有一个XQ的方法,想让它根据配置的策略进行执行。比如是先保存数据库,再一步消息处理,在这边访问一下,可以看到这个OK是立刻就返回了,在这边就有对应的日志输出。

比如首先是一步保存数据库,发送消息,最终catch (InterruptedException e Log.error("打断了"),其实就是执行这样的方法,最终执行成功。

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

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

欢迎 发表评论:

最近发表
标签列表