feat(REQ-2616) - Starter 过滤实现增加调整

This commit is contained in:
wangli 2024-08-22 11:40:47 +08:00
parent d5dbec75b0
commit 8ad27e017e
14 changed files with 71 additions and 12 deletions

View File

@ -104,6 +104,7 @@ public class StarterBroadcastMQConfiguration {
@Override
public void onMessage(MessageExt message) {
// 处理 properties 配置进行事件过滤
for (InnerMessageQueueHandleBeforeFilter filter : filters) {
if (filter.doFilter(message)) {
log.info("【{}】message has been filtered, messageId: {}", this.getClass().getSimpleName(), message.getMsgId());

View File

@ -13,6 +13,16 @@ import org.springframework.core.Ordered;
*/
public interface MessageNotificationEventHandler extends Ordered {
/**
* 针对当前实现进行过滤
*
* @param dto
* @return
*/
default boolean filter(MessagePushDTO dto) {
return true;
}
/**
* 站内信推送
*

View File

@ -18,6 +18,16 @@ import org.springframework.core.Ordered;
*/
public interface ProcessActivityEventHandler extends Ordered {
/**
* 针对当前实现进行过滤
*
* @param dto
* @return
*/
default boolean filter(ProcessActivityDTO dto) {
return false;
}
/**
* 节点已启动
*

View File

@ -15,6 +15,16 @@ import org.springframework.core.Ordered;
*/
public interface ProcessInstanceEventHandler extends Ordered {
/**
* 针对当前实现进行过滤
*
* @param dto
* @return
*/
default boolean filter(ProcessInstanceDTO dto) {
return true;
}
/**
* 流程实例创建成功后回调
*

View File

@ -15,6 +15,16 @@ import org.springframework.core.Ordered;
*/
public interface ProcessTaskEventHandler extends Ordered {
/**
* 针对当前实现进行过滤
*
* @param dto
* @return
*/
default boolean filter(ProcessTaskDTO dto) {
return true;
}
/**
* 用户任务已指派审核人
*/

View File

@ -1,11 +1,14 @@
package cn.axzo.workflow.starter.handler.filter;
import cn.axzo.workflow.common.model.response.mq.MessagePushDTO;
import cn.axzo.workflow.starter.handler.MessageNotificationEventHandler;
import cn.axzo.workflow.starter.mq.broadcast.filter.BasicMessageQueueFilter;
/**
* MessageNotificationEvent 的自定义过滤接口
* <p>
* 该接口的实现是会全局过滤比如当应用需要监听多个流程模型时全局过滤会不精确所以我们还提供了针对 {@link MessageNotificationEventHandler#filter(MessagePushDTO)} 实例的专属过滤
* <p>
* 注意Order 的顺序遵循值越小越优先取值范围Integer. MIN_VALUE - Integer. MAX_VALUE
*
* @author wangli

View File

@ -1,11 +1,14 @@
package cn.axzo.workflow.starter.handler.filter;
import cn.axzo.workflow.common.model.response.mq.ProcessActivityDTO;
import cn.axzo.workflow.starter.handler.ProcessActivityEventHandler;
import cn.axzo.workflow.starter.mq.broadcast.filter.BasicMessageQueueFilter;
/**
* ProcessActivityEvent 自定义的过滤接口
* <p>
* 该接口的实现是会全局过滤比如当应用需要监听多个流程模型时全局过滤会不精确所以我们还提供了针对 {@link ProcessActivityEventHandler#filter(ProcessActivityDTO)} 实例的专属过滤
* <p>
* 注意Order 的顺序遵循值越小越优先取值范围Integer. MIN_VALUE - Integer. MAX_VALUE
*
* @author wangli

View File

@ -1,11 +1,14 @@
package cn.axzo.workflow.starter.handler.filter;
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
import cn.axzo.workflow.starter.mq.broadcast.filter.BasicMessageQueueFilter;
/**
* ProcessInstanceEvent 自定义的过滤接口
* <p>
* 该接口的实现是会全局过滤比如当应用需要监听多个流程模型时全局过滤会不精确所以我们还提供了针对 {@link ProcessInstanceEventHandler#filter(ProcessInstanceDTO)} 实例的专属过滤
* <p>
* 注意Order 的顺序遵循值越小越优先取值范围Integer. MIN_VALUE - Integer. MAX_VALUE
*
* @author wangli

View File

@ -1,11 +1,14 @@
package cn.axzo.workflow.starter.handler.filter;
import cn.axzo.workflow.common.model.response.mq.ProcessTaskDTO;
import cn.axzo.workflow.starter.handler.ProcessTaskEventHandler;
import cn.axzo.workflow.starter.mq.broadcast.filter.BasicMessageQueueFilter;
/**
* ProcessTaskEvent 自定义的过滤接口
* <p>
* 该接口的实现是会全局过滤比如当应用需要监听多个流程模型时全局过滤会不精确所以我们还提供了针对 {@link ProcessTaskEventHandler#filter(ProcessTaskDTO)} 实例的专属过滤
* <p>
* 注意Order 的顺序遵循值越小越优先取值范围Integer. MIN_VALUE - Integer. MAX_VALUE
*
* @author wangli

View File

@ -54,16 +54,14 @@ public abstract class AbstractInnerWorkflowListener<H extends Ordered, F extends
@Override
public void handleEvent(Event event, EventConsumer.Context context) {
if (CollectionUtils.isEmpty(businessListeners)) {
return;
}
Target convert = convert(event);
for (F filter : businessFilters) {
if (filter.doFilter(event, context, convert)) {
log.info("【{}】filtered message, messageId: {}", filter.getClass().getSimpleName(), context.getMsgId());
return;
if (!CollectionUtils.isEmpty(businessListeners)) {
for (F filter : businessFilters) {
if (filter.doFilter(event, context, convert)) {
log.info("【{}】filtered message, messageId: {}", filter.getClass().getSimpleName(), context.getMsgId());
return;
}
}
}

View File

@ -65,7 +65,9 @@ public class InnerActivityEventListener extends AbstractInnerWorkflowListener<Pr
default:
log.warn("unknown process activity event type: {}", type);
}
listenerExecutor.execute(consumer, context, dto);
if (!activityListener.filter(dto)) {
listenerExecutor.execute(consumer, context, dto);
}
}
}

View File

@ -68,7 +68,9 @@ public class InnerInstanceEventListener extends AbstractInnerWorkflowListener<Pr
default:
log.warn("unknown process activity event type: {}", type);
}
listenerExecutor.execute(consumer, context, dto);
if (!instanceListener.filter(dto)) {
listenerExecutor.execute(consumer, context, dto);
}
}
}

View File

@ -69,7 +69,9 @@ public class InnerNotificationEventListener extends AbstractInnerWorkflowListene
default:
log.warn("unknown message event type: {}", type);
}
listenerExecutor.execute(consumer, context, dto);
if (!noticeListener.filter(dto)) {
listenerExecutor.execute(consumer, context, dto);
}
}
}

View File

@ -60,7 +60,9 @@ public class InnerTaskEventListener extends AbstractInnerWorkflowListener<Proces
default:
log.warn("unknown task event type: {}", type);
}
listenerExecutor.execute(consumer, context, dto);
if (!taskListener.filter(dto)) {
listenerExecutor.execute(consumer, context, dto);
}
}
}