1. 概要
在流程审批时,当新的任务创建时,我们需要通知任务执行人。在通知的时候,我们可能会有多种通知方式,比如邮件,短信,微信,内部消息等等。另外我们也可以使用其他的通知方式。
在平台种通知的实现方式是:
1.构建一个消息对象。
2.将这个消息对象发送到消息队列。
3.消息队列的消费者获取消息并根据消息的类型,找到相应的消息处理器对消息进行发送。
2. 实现方式
2.1 消息对象模型
com.redxun.mq.MessageModel
该对象定义在jpaas-share 模块中。
2.2 消息处理器接口定义
package com.redxun.bpm.core.ext.messagehandler;
import com.redxun.mq.MessageModel;
public interface IMessageHandler {
/**
* 消息类型。
* @return
*/
MessageType getType();
/**
* 处理消息数据。
*/
void handMessage(MessageModel messageModel);
}
我们需要实现这个接口对消息进行发送。
2.3 内部消息发送实现案例
package com.redxun.bpm.core.ext.messagehandler.impl;
@Component
@Slf4j
public class InfInnerMsgHandler implements IMessageHandler {
@Override
public MessageType getType() {
return new MessageType( "inner","内部消息");
}
@Override
public void handMessage(MessageModel messageModel) {
//发送人Id
String fromUserId= messageModel.getSender().getUserId();
if(StringUtils.isEmpty(fromUserId)){
return;
}
//发送内容
String content="";
//接收人
for(IUser receiver:messageModel.getReceivers()){
if(receiver==null || StringUtils.isEmpty(receiver.getUserId())){
continue;
}
try{
String subject=InformUtil.getInformSubject(messageModel);
if(StringUtils.isNotEmpty(subject)){
messageModel.setSubject(subject);
}
content = MessageUtil.getContent(messageModel, receiver, getType().getType());
InfInnerMsgUtil.sendSystemMsg(receiver,content,messageModel.getSender().getFullName()+"抄送给你一条流程实例信息");
}
catch (Exception ex){
String message= ExceptionUtil.getExceptionMessage(ex);
log.error(message);
}
}
}
}
这里需要注意的是需要增加 @Component 注解。用户可以根据自己的实际情况,实现自己的发送消息的实现。
文档更新时间: 2022-01-20 14:53 作者:zyg