From 4c884afdb50c1204a2ef132d2f069012e58970fd Mon Sep 17 00:00:00 2001 From: xiaoxiamo <82970607@qq.com> Date: Sun, 16 Jun 2024 01:22:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8A=BD=E8=B1=A1=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E8=80=85=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=96=B9?= =?UTF-8?q?=E4=BE=BF=E7=AE=A1=E7=90=86=E4=B8=8E=E6=8B=93=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/receiver/MessageReceiver.java | 11 + .../receiver/eventbus/EventBusReceiver.java | 3 +- .../handler/receiver/kafka/Receiver.java | 3 +- .../receiver/rabbit/RabbitMqReceiver.java | 3 +- .../rocketmq/RocketMqBizReceiver.java | 3 +- .../rocketmq/RocketMqRecallReceiver.java | 3 +- .../SpringEventBusReceiverListener.java | 3 +- doc/uml/AustinCoreClassDiagram.drawio | 1584 ++++++++++++++++- 8 files changed, 1606 insertions(+), 7 deletions(-) create mode 100644 austin-handler/src/main/java/com/java3y/austin/handler/receiver/MessageReceiver.java diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/MessageReceiver.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/MessageReceiver.java new file mode 100644 index 0000000..c59f770 --- /dev/null +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/MessageReceiver.java @@ -0,0 +1,11 @@ +package com.java3y.austin.handler.receiver; + +/** + * 消息接收者接口 + * + * @author xiaoxiamao + * @date 2024/06/16 + */ +public interface MessageReceiver { + +} diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/eventbus/EventBusReceiver.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/eventbus/EventBusReceiver.java index 3274362..8c2883f 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/eventbus/EventBusReceiver.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/eventbus/EventBusReceiver.java @@ -3,6 +3,7 @@ package com.java3y.austin.handler.receiver.eventbus; import com.google.common.eventbus.Subscribe; import com.java3y.austin.common.domain.RecallTaskInfo; import com.java3y.austin.common.domain.TaskInfo; +import com.java3y.austin.handler.receiver.MessageReceiver; import com.java3y.austin.handler.receiver.service.ConsumeService; import com.java3y.austin.support.constans.MessageQueuePipeline; import com.java3y.austin.support.mq.eventbus.EventBusListener; @@ -17,7 +18,7 @@ import java.util.List; */ @Component @ConditionalOnProperty(name = "austin.mq.pipeline", havingValue = MessageQueuePipeline.EVENT_BUS) -public class EventBusReceiver implements EventBusListener { +public class EventBusReceiver implements EventBusListener, MessageReceiver { @Autowired private ConsumeService consumeService; diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/kafka/Receiver.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/kafka/Receiver.java index ba19f70..912f921 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/kafka/Receiver.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/kafka/Receiver.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; import com.java3y.austin.common.domain.RecallTaskInfo; import com.java3y.austin.common.domain.TaskInfo; +import com.java3y.austin.handler.receiver.MessageReceiver; import com.java3y.austin.handler.receiver.service.ConsumeService; import com.java3y.austin.handler.utils.GroupIdMappingUtils; import com.java3y.austin.support.constans.MessageQueuePipeline; @@ -29,7 +30,7 @@ import java.util.Optional; @Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @ConditionalOnProperty(name = "austin.mq.pipeline", havingValue = MessageQueuePipeline.KAFKA) -public class Receiver { +public class Receiver implements MessageReceiver { @Autowired private ConsumeService consumeService; diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rabbit/RabbitMqReceiver.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rabbit/RabbitMqReceiver.java index 35ec130..edbadff 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rabbit/RabbitMqReceiver.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rabbit/RabbitMqReceiver.java @@ -3,6 +3,7 @@ package com.java3y.austin.handler.receiver.rabbit; import com.alibaba.fastjson.JSON; import com.java3y.austin.common.domain.RecallTaskInfo; import com.java3y.austin.common.domain.TaskInfo; +import com.java3y.austin.handler.receiver.MessageReceiver; import com.java3y.austin.handler.receiver.service.ConsumeService; import com.java3y.austin.support.constans.MessageQueuePipeline; import org.apache.commons.lang3.StringUtils; @@ -25,7 +26,7 @@ import java.util.List; */ @Component @ConditionalOnProperty(name = "austin.mq.pipeline", havingValue = MessageQueuePipeline.RABBIT_MQ) -public class RabbitMqReceiver { +public class RabbitMqReceiver implements MessageReceiver { private static final String MSG_TYPE_SEND = "send"; private static final String MSG_TYPE_RECALL = "recall"; diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqBizReceiver.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqBizReceiver.java index c0755a6..27a2183 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqBizReceiver.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqBizReceiver.java @@ -2,6 +2,7 @@ package com.java3y.austin.handler.receiver.rocketmq; import com.alibaba.fastjson.JSON; import com.java3y.austin.common.domain.TaskInfo; +import com.java3y.austin.handler.receiver.MessageReceiver; import com.java3y.austin.handler.receiver.service.ConsumeService; import com.java3y.austin.support.constans.MessageQueuePipeline; import org.apache.commons.lang3.StringUtils; @@ -27,7 +28,7 @@ import java.util.List; selectorType = SelectorType.TAG, selectorExpression = "${austin.business.tagId.value}" ) -public class RocketMqBizReceiver implements RocketMQListener { +public class RocketMqBizReceiver implements RocketMQListener, MessageReceiver { @Autowired private ConsumeService consumeService; diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqRecallReceiver.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqRecallReceiver.java index 9f2a8e7..28eb289 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqRecallReceiver.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/rocketmq/RocketMqRecallReceiver.java @@ -2,6 +2,7 @@ package com.java3y.austin.handler.receiver.rocketmq; import com.alibaba.fastjson.JSON; import com.java3y.austin.common.domain.RecallTaskInfo; +import com.java3y.austin.handler.receiver.MessageReceiver; import com.java3y.austin.handler.receiver.service.ConsumeService; import com.java3y.austin.support.constans.MessageQueuePipeline; import org.apache.commons.lang3.StringUtils; @@ -25,7 +26,7 @@ import org.springframework.stereotype.Component; selectorType = SelectorType.TAG, selectorExpression = "${austin.business.tagId.value}" ) -public class RocketMqRecallReceiver implements RocketMQListener { +public class RocketMqRecallReceiver implements RocketMQListener, MessageReceiver { @Autowired private ConsumeService consumeService; diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/springeventbus/SpringEventBusReceiverListener.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/springeventbus/SpringEventBusReceiverListener.java index 0fc1a44..a890d95 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/springeventbus/SpringEventBusReceiverListener.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/springeventbus/SpringEventBusReceiverListener.java @@ -3,6 +3,7 @@ package com.java3y.austin.handler.receiver.springeventbus; import com.alibaba.fastjson.JSON; import com.java3y.austin.common.domain.RecallTaskInfo; import com.java3y.austin.common.domain.TaskInfo; +import com.java3y.austin.handler.receiver.MessageReceiver; import com.java3y.austin.support.constans.MessageQueuePipeline; import com.java3y.austin.support.mq.springeventbus.AustinSpringEventBusEvent; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +20,7 @@ import org.springframework.stereotype.Service; */ @Service @ConditionalOnProperty(name = "austin.mq.pipeline", havingValue = MessageQueuePipeline.SPRING_EVENT_BUS) -public class SpringEventBusReceiverListener implements ApplicationListener { +public class SpringEventBusReceiverListener implements ApplicationListener, MessageReceiver { @Autowired private SpringEventBusReceiver springEventBusReceiver; diff --git a/doc/uml/AustinCoreClassDiagram.drawio b/doc/uml/AustinCoreClassDiagram.drawio index 3271a64..12d8cee 100644 --- a/doc/uml/AustinCoreClassDiagram.drawio +++ b/doc/uml/AustinCoreClassDiagram.drawio @@ -1 +1,1583 @@ -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 \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +