一、概览
spring基于@Async注解可以实现方法的异步执行,但是这种实现方式是基于线程池实现,只适用于要求不太严谨的业务,本文将会基于mq实现异步方法执行。
本组件的目标是不需要编码、支持顺序消费、发送和执行可以隔离。
二、组件设计
1.类图
AsyncByMQ -> 异步注解,可配置topic、tag、consumerGroup、serverGroup。
AbstractMqRegistry ->
a、负责收集带有@AsyncByMQ注解的方法信息。
b、负责在启动、销毁时候 启动/停止所有的consumer
AbstractMqContainer -> 带有@AsyncByMQ注解容器,包括target,mqListener,mqconsumer
AbstractMqListener -> 消费GenericMessage消息,基于反射发起调用
AsyncByMqSendMQMethodInterceptor -> 实现异步方法调用逻辑,直接返回方法调用,并封装成GenericMessage异步发送
GenericMessage -> mq 消息结构,包括classname,methodname, args
2.使用样例
@AsyncBasedRocketMQ(topic = "test-topic",
tag = "test1",
consumerGroup = "test-topic-consumer")
public void test1(Long id, String name){
log.info("接收数据,id:[{}], name:[{}]", id, name);
}