概述

消息是指流程任务或其他业务在办理时,需要通知相关人员时使用的一种消息通知的方式,目前市场主流消息通知方式,平台均作了集成,包括有:

  • 内部消息
  • 企业微信
  • 钉钉
  • 邮件
  • 短信
  • 个推

未来需要在上面扩展的,可以基于以上方式进行参考集成。

集成方式

平台的消息是采用异步的方式进行消息通知的,其原理如下所示:

内部消息实现参考

消息对象模型

com.redxun.mq.MessageModel

该对象定义在jpaas-share 模块中,可以在平台中引用使用。

消息处理器接口定义

package com.redxun.bpm.core.ext.messagehandler;
import com.redxun.mq.MessageModel;
public interface IMessageHandler {
    /**
     * 消息类型。
     * @return
     */
    MessageType getType();
    /**
     * 处理消息数据。
     */
    void handMessage(MessageModel messageModel);
}

我们需要实现这个接口对消息进行发送。

内部消息发送实现案例

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 注解。用户可以根据自己的实际情况,实现自己的发送消息的实现。

文档更新时间: 2021-03-29 11:53   作者:zyg