diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/CardPresetButtonSyncTodoHandler.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/CardPresetButtonSyncTodoHandler.java index 9c018efb..87021205 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/CardPresetButtonSyncTodoHandler.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/CardPresetButtonSyncTodoHandler.java @@ -2,13 +2,11 @@ package cn.axzo.msg.center.message.service.todo.card; import cn.axzo.framework.rocketmq.Event; import cn.axzo.framework.rocketmq.EventConsumer; -import cn.axzo.framework.rocketmq.EventHandler; import cn.axzo.msg.center.api.mq.CardPresetButtonPressedMessage; import cn.axzo.msg.center.mq.ConsumerIsolation; +import cn.axzo.msg.center.mq.IsolationMQListener; import cn.axzo.msg.center.service.enums.MqMessageType; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; /** @@ -16,24 +14,21 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component -@RequiredArgsConstructor -public class CardPresetButtonSyncTodoHandler implements EventHandler, InitializingBean { +public class CardPresetButtonSyncTodoHandler extends IsolationMQListener { - private final EventConsumer eventConsumer; private final TodoSyncCardService todoSyncCardService; + CardPresetButtonSyncTodoHandler(TodoSyncCardService todoSyncCardService) { + super(ConsumerIsolation.CARD_PRESET_BUTTON_CLICKED_SYNC_TODO, + MqMessageType.CARD_PRESET_BUTTON_PRESSED); + this.todoSyncCardService = todoSyncCardService; + } + @Override - public void onEvent(Event event, EventConsumer.Context context) { - if (ConsumerIsolation.getIsolation() != ConsumerIsolation.CARD_PRESET_BUTTON_CLICKED_SYNC_TODO) - return; + public void onEventImpl(Event event, EventConsumer.Context context) { CardPresetButtonPressedMessage message = event.normalizedData(CardPresetButtonPressedMessage.class); log.info("received CardPresetButtonPressedMessage: {}", message); todoSyncCardService.syncCardPresetButtonPressed(message); } - @Override - public void afterPropertiesSet() { - eventConsumer.registerHandler(MqMessageType.CARD_PRESET_BUTTON_PRESSED.getEventCode(), this); - } - } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoPresetButtonSyncCardHandler.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoPresetButtonSyncCardHandler.java index 335da4a2..c681f116 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoPresetButtonSyncCardHandler.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoPresetButtonSyncCardHandler.java @@ -2,13 +2,11 @@ package cn.axzo.msg.center.message.service.todo.card; import cn.axzo.framework.rocketmq.Event; import cn.axzo.framework.rocketmq.EventConsumer; -import cn.axzo.framework.rocketmq.EventHandler; import cn.axzo.msg.center.api.mq.PresetButtonPressedMessage; import cn.axzo.msg.center.mq.ConsumerIsolation; +import cn.axzo.msg.center.mq.IsolationMQListener; import cn.axzo.msg.center.service.enums.MqMessageType; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; /** @@ -16,24 +14,21 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component -@RequiredArgsConstructor -public class TodoPresetButtonSyncCardHandler implements EventHandler, InitializingBean { +public class TodoPresetButtonSyncCardHandler extends IsolationMQListener { - private final EventConsumer eventConsumer; private final TodoSyncCardService todoSyncCardService; + TodoPresetButtonSyncCardHandler(TodoSyncCardService todoSyncCardService) { + super(ConsumerIsolation.TODO_PRESET_BUTTON_CLICKED_SYNC_CARD, + MqMessageType.TODO_PRESET_BUTTON_PRESSED); + this.todoSyncCardService = todoSyncCardService; + } + @Override - public void onEvent(Event event, EventConsumer.Context context) { - if (ConsumerIsolation.getIsolation() != ConsumerIsolation.TODO_PRESET_BUTTON_CLICKED_SYNC_CARD) - return; + public void onEventImpl(Event event, EventConsumer.Context context) { PresetButtonPressedMessage message = event.normalizedData(PresetButtonPressedMessage.class); log.info("received PresetButtonPressedMessage: {}", message); todoSyncCardService.syncTodoPresetButtonPressed(message); } - @Override - public void afterPropertiesSet() { - eventConsumer.registerHandler(MqMessageType.TODO_PRESET_BUTTON_PRESSED.getEventCode(), this); - } - } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardBizHandler.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardBizHandler.java index 756aeb58..e3b09bcc 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardBizHandler.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardBizHandler.java @@ -2,14 +2,12 @@ package cn.axzo.msg.center.message.service.todo.card; import cn.axzo.framework.rocketmq.Event; import cn.axzo.framework.rocketmq.EventConsumer; -import cn.axzo.framework.rocketmq.EventHandler; import cn.axzo.msg.center.api.mq.TodoUpdateMessage; import cn.axzo.msg.center.mq.ConsumerIsolation; +import cn.axzo.msg.center.mq.IsolationMQListener; import cn.axzo.msg.center.service.enums.BizCategoryEnum; import cn.axzo.msg.center.service.enums.MqMessageType; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; /** @@ -17,14 +15,17 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component -@RequiredArgsConstructor -class TodoSyncCardBizHandler implements EventHandler, InitializingBean { +class TodoSyncCardBizHandler extends IsolationMQListener { - private final EventConsumer eventConsumer; private final TodoSyncCardService todoSyncCardService; + TodoSyncCardBizHandler(TodoSyncCardService todoSyncCardService) { + super(ConsumerIsolation.TODO_SYNC_CARD_BIZ, MqMessageType.TODO_STATE_UPDATE); + this.todoSyncCardService = todoSyncCardService; + } + @Override - public void onEvent(Event event, EventConsumer.Context context) { + public void onEventImpl(Event event, EventConsumer.Context context) { TodoUpdateMessage message; try { message = event.normalizedData(TodoUpdateMessage.class); @@ -32,15 +33,8 @@ class TodoSyncCardBizHandler implements EventHandler, InitializingBean { log.warn("parse message error. event={}", event, e); return; } - if (ConsumerIsolation.getIsolation() == ConsumerIsolation.TODO_SYNC_CARD_BIZ - && message.getUpdatedTodo().getBizCategory() == BizCategoryEnum.OTHER) { + if (message.getUpdatedTodo().getBizCategory() == BizCategoryEnum.OTHER) todoSyncCardService.onMessage(event, message); - } - } - - @Override - public void afterPropertiesSet() { - eventConsumer.registerHandler(MqMessageType.TODO_STATE_UPDATE.getEventCode(), this); } } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardFlowHandler.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardFlowHandler.java index 5a779536..900eb7a7 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardFlowHandler.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardFlowHandler.java @@ -2,14 +2,12 @@ package cn.axzo.msg.center.message.service.todo.card; import cn.axzo.framework.rocketmq.Event; import cn.axzo.framework.rocketmq.EventConsumer; -import cn.axzo.framework.rocketmq.EventHandler; import cn.axzo.msg.center.api.mq.TodoUpdateMessage; import cn.axzo.msg.center.mq.ConsumerIsolation; +import cn.axzo.msg.center.mq.IsolationMQListener; import cn.axzo.msg.center.service.enums.BizCategoryEnum; import cn.axzo.msg.center.service.enums.MqMessageType; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; /** @@ -17,14 +15,17 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component -@RequiredArgsConstructor -class TodoSyncCardFlowHandler implements EventHandler, InitializingBean { +class TodoSyncCardFlowHandler extends IsolationMQListener { - private final EventConsumer eventConsumer; private final TodoSyncCardService todoSyncCardService; + TodoSyncCardFlowHandler(TodoSyncCardService todoSyncCardService) { + super(ConsumerIsolation.TODO_SYNC_CARD_FLOW, MqMessageType.TODO_STATE_UPDATE); + this.todoSyncCardService = todoSyncCardService; + } + @Override - public void onEvent(Event event, EventConsumer.Context context) { + public void onEventImpl(Event event, EventConsumer.Context context) { TodoUpdateMessage message; try { message = event.normalizedData(TodoUpdateMessage.class); @@ -32,15 +33,8 @@ class TodoSyncCardFlowHandler implements EventHandler, InitializingBean { log.warn("parse message error. event={}", event, e); return; } - if (ConsumerIsolation.getIsolation() == ConsumerIsolation.TODO_SYNC_CARD_FLOW - && message.getUpdatedTodo().getBizCategory() == BizCategoryEnum.FLOW) { + if (message.getUpdatedTodo().getBizCategory() == BizCategoryEnum.FLOW) todoSyncCardService.onMessage(event, message); - } - } - - @Override - public void afterPropertiesSet() { - eventConsumer.registerHandler(MqMessageType.TODO_STATE_UPDATE.getEventCode(), this); } } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/mq/IsolationMQListener.java b/inside-notices/src/main/java/cn/axzo/msg/center/mq/IsolationMQListener.java new file mode 100644 index 00000000..bfcc56d3 --- /dev/null +++ b/inside-notices/src/main/java/cn/axzo/msg/center/mq/IsolationMQListener.java @@ -0,0 +1,56 @@ +package cn.axzo.msg.center.mq; + +import cn.axzo.framework.rocketmq.BaseListener; +import cn.axzo.framework.rocketmq.Event; +import cn.axzo.framework.rocketmq.EventConsumer; +import cn.axzo.framework.rocketmq.EventHandler; +import cn.axzo.msg.center.service.enums.MqMessageType; +import lombok.RequiredArgsConstructor; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author yanglin + */ +public abstract class IsolationMQListener extends BaseListener + implements RocketMQListener, EventHandler, InitializingBean { + + @Autowired + private EventConsumer eventConsumer; + private final ConsumerIsolation isolation; + private final Event.EventCode eventCode; + + protected IsolationMQListener(ConsumerIsolation isolation, MqMessageType mqMessageType) { + this(isolation, mqMessageType.getEventCode()); + } + + protected IsolationMQListener(ConsumerIsolation isolation, Event.EventCode eventCode) { + this.isolation = isolation; + this.eventCode = eventCode; + } + + @Override + public void onMessage(MessageExt message) { + ConsumerIsolation.setIsolation(isolation); + try { + super.onEvent(message, eventConsumer); + } finally { + ConsumerIsolation.clearIsolation(); + } + } + + @Override + public final void onEvent(Event event, EventConsumer.Context context) { + if (ConsumerIsolation.getIsolation() == isolation) + onEventImpl(event, context); + } + + @Override + public void afterPropertiesSet() { + eventConsumer.registerHandler(eventCode, this); + } + + public abstract void onEventImpl(Event event, EventConsumer.Context context); +} \ No newline at end of file