update - REQ-2516-流程接口继承order接口增加排序,调整Listener生成bean方式

This commit is contained in:
yangqicheng 2024-05-31 10:23:29 +08:00
parent d07e580e7b
commit 96e277c85e
9 changed files with 44 additions and 30 deletions

View File

@ -7,6 +7,8 @@ import cn.axzo.framework.rocketmq.EventHandlerRepository;
import cn.axzo.framework.rocketmq.EventProducer;
import cn.axzo.framework.rocketmq.RocketMQEventProducer;
import cn.axzo.workflow.starter.api.WorkflowCoreService;
import cn.axzo.workflow.starter.mq.broadcast.consumer.WorkflowEngineBroadcastEventListener;
import cn.axzo.workflow.starter.mq.broadcast.consumer.WorkflowListener;
import cn.axzo.workflow.starter.mq.retry.consumer.WorkflowEngineStarterRetryEventListener;
import cn.axzo.workflow.starter.mq.retry.producer.RpcInvokeEventProducer;
import org.apache.rocketmq.common.message.MessageExt;
@ -16,6 +18,7 @@ import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
@ -25,6 +28,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
@ -111,7 +115,7 @@ public class RocketMQConfiguration {
consumeMode = ConsumeMode.ORDERLY,
nameServer = "${rocketmq.name-server}"
)
public class WorkflowEngineBroadcastConsumer extends BaseListener implements RocketMQListener<MessageExt> {
public static class WorkflowEngineBroadcastConsumer extends BaseListener implements RocketMQListener<MessageExt> {
@Resource
private EventConsumer eventConsumer;
@ -127,7 +131,7 @@ public class RocketMQConfiguration {
consumeMode = ConsumeMode.CONCURRENTLY,
nameServer = "${rocketmq.name-server}"
)
public class WorkflowEngineClientRetryConsumer extends BaseListener implements RocketMQListener<MessageExt> {
public static class WorkflowEngineClientRetryConsumer extends BaseListener implements RocketMQListener<MessageExt> {
@Resource
private EventConsumer eventConsumer;
@ -144,4 +148,9 @@ public class RocketMQConfiguration {
return new WorkflowEngineStarterRetryEventListener(eventConsumer, environment, workflowCoreService);
}
@Bean(initMethod = "init")
public WorkflowEngineBroadcastEventListener WorkflowEngineBroadcastEventListener(EventConsumer eventConsumer, ObjectProvider<List<WorkflowListener>> listeners) {
return new WorkflowEngineBroadcastEventListener(eventConsumer, listeners.getIfAvailable());
}
}

View File

@ -1,6 +1,7 @@
package cn.axzo.workflow.starter.listener;
import cn.axzo.workflow.common.model.response.mq.MessagePushDTO;
import org.springframework.core.Ordered;
/**
* TODO
@ -8,7 +9,7 @@ import cn.axzo.workflow.common.model.response.mq.MessagePushDTO;
* @author wangli
* @since 2024/5/27 16:25
*/
public interface MessageNotificationListener {
public interface MessageNotificationListener extends Ordered {
void pushNotice(MessagePushDTO messagePushDTO);

View File

@ -1,42 +1,39 @@
package cn.axzo.workflow.starter.listener;
import cn.axzo.workflow.common.model.response.mq.ProcessActivityDTO;
import org.springframework.core.Ordered;
/**
* @author wangli
* @since 2024/5/27 16:25
*/
public interface ProcessActivityListener {
public interface ProcessActivityListener extends Ordered {
/**
* 节点已启动
*
* @param activityDTO 入参
*/
default void onStart(ProcessActivityDTO activityDTO) {
}
void onStart(ProcessActivityDTO activityDTO);
/**
* 节点等待业务指定审批人
*
* @param activityDTO 入参
*/
default void onWaitAssignee(ProcessActivityDTO activityDTO) {
}
void onWaitAssignee(ProcessActivityDTO activityDTO);
/**
* 节点已完成
*
* @param activityDTO 入参
*/
default void onTake(ProcessActivityDTO activityDTO) {
}
void onTake(ProcessActivityDTO activityDTO);
/**
* 节点已取消
*
* @param activityDTO 入参
*/
default void onEnd(ProcessActivityDTO activityDTO) {
}
void onEnd(ProcessActivityDTO activityDTO);
}

View File

@ -1,12 +1,14 @@
package cn.axzo.workflow.starter.listener;
import org.springframework.core.Ordered;
/**
* TODO
*
* @author wangli
* @since 2024/5/27 16:20
*/
public interface ProcessInstanceListener extends ProcessListener {
public interface ProcessInstanceListener extends Ordered {
void created();

View File

@ -1,12 +1,14 @@
package cn.axzo.workflow.starter.listener;
import org.springframework.core.Ordered;
/**
* TODO
*
* @author wangli
* @since 2024/5/27 16:26
*/
public interface ProcessListener {
public interface ProcessListener extends Ordered {
/**
* 入参来源于配置
*

View File

@ -1,10 +1,12 @@
package cn.axzo.workflow.starter.listener;
import org.springframework.core.Ordered;
/**
* TODO
*
* @author wangli
* @since 2024/5/27 16:21
*/
public interface ProcessTaskListener {
public interface ProcessTaskListener extends Ordered {
}

View File

@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSON;
import com.google.common.collect.ImmutableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@ -32,13 +33,14 @@ public class InnerActivityEventListener implements WorkflowListener {
);
@Autowired
private List<ProcessActivityListener> activityListeners;
private ObjectProvider<List<ProcessActivityListener>> activityListenersProvider;
@Autowired
private ListenerExecutor listenerExecutor;
@Override
public void handEvent(Event event, EventConsumer.Context context) {
List<ProcessActivityListener> activityListeners = activityListenersProvider.getIfAvailable();
if (!CollectionUtils.isEmpty(activityListeners)) {
ProcessActivityDTO activityDTO = JSON.parseObject(event.getData().toString(), ProcessActivityDTO.class);
ProcessActivityEventEnum type = activityDTO.getType();

View File

@ -30,6 +30,11 @@ public class InnerNoticeEventListener {
public static void main(String[] args) {
MessageNotificationListener listener = new MessageNotificationListener() {
@Override
public int getOrder() {
return 0;
}
@Override
public void pushNotice(MessagePushDTO messagePushDTO) {
}

View File

@ -7,24 +7,26 @@ import cn.axzo.workflow.common.model.response.mq.MessagePushDTO;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Objects;
/**
* TODO
*
* @author wangli
* @since 2024/5/21 15:50
*/
@Component
public class WorkflowEngineBroadcastEventListener implements EventHandler, InitializingBean {
public class WorkflowEngineBroadcastEventListener implements EventHandler {
private final Logger log = LoggerFactory.getLogger(WorkflowEngineBroadcastEventListener.class);
private final EventConsumer eventConsumer;
private final List<WorkflowListener> workflowListeners;
public void init() {
eventConsumer.registerHandlers(InnerActivityEventListener.SUPPORTED_EVENT_CODES, this);
eventConsumer.registerHandlers(InnerInstanceEventListener.SUPPORTED_EVENT_CODES, this);
eventConsumer.registerHandlers(InnerNoticeEventListener.SUPPORTED_EVENT_CODES, this);
eventConsumer.registerHandlers(InnerTaskEventListener.SUPPORTED_EVENT_CODES, this);
}
public WorkflowEngineBroadcastEventListener(EventConsumer eventConsumer, List<WorkflowListener> workflowListeners) {
this.eventConsumer = eventConsumer;
this.workflowListeners = workflowListeners;
@ -43,12 +45,4 @@ public class WorkflowEngineBroadcastEventListener implements EventHandler, Initi
}
}
}
@Override
public void afterPropertiesSet() throws Exception {
eventConsumer.registerHandlers(InnerActivityEventListener.SUPPORTED_EVENT_CODES, this);
eventConsumer.registerHandlers(InnerInstanceEventListener.SUPPORTED_EVENT_CODES, this);
eventConsumer.registerHandlers(InnerNoticeEventListener.SUPPORTED_EVENT_CODES, this);
eventConsumer.registerHandlers(InnerTaskEventListener.SUPPORTED_EVENT_CODES, this);
}
}