消息日志介绍
变更记录
产品版本 | 更新内容 | 更新日期 |
V6.0.1 | 消息日志所属应用从系统服务云调整到基础服务云的公共设置 | 2023年10月23日 |
1 简介
1.1 功能介绍
消息日志存储消息中心所有业务推送的各个渠道为单位的消息日志。
消息日志默认只保留渠道消息失败日志,用户可以通过打开所需渠道上的启用日志开关,允许消息中心记录该渠道完整日志。
1.2 系统路径
V5.0及以下:【系统服务云】→【系统管理】→【消息平台】→【消息日志】
V6.0: 【基础服务云】→【公共设置】→【消息设置】→【消息日志】
1.3 应用场景
1.消息失败重发
消息中心对于业务推送的消息,有一套完整处理机制,业务在使用消息中心接口推送消息,由于一些不可预知的因素,导致消息推送失败,失败消息会保存在消息中心消息日志列表中。
消息中心针对失败的消息提供失败重发机制,使用调度任务完成失败消息扫描,默认扫描间隔5min,用户可以根据实际需求修改调度执行间隔时间。标准产品中一次调度获取200条失败消息,同一条失败消息最多重试5次,消息中心的失败消息按照修改时间先后排队等待重试。
在最新版本中失败消息重发必须符合有效时间范围,默认为15天,范围之外的失败消息不再参与重试,用户可根据实际情况自动调节时间有效范围。
2.业务干预消息推送
业务使用消息中心推送消息可能具有特定业务场景以及时效性,比如工作推送的协办消息,任务待办A在为处理之前,请求人员B协办,因为mq问题消息处于待发送状态,或者协办消息推送失败。
但是该协办消息在可以推送之前,待办A处理完成,之后针对该协办消息的推送则没有意义。此时,工作流可以使用该功能在消息中心推送过程中排除该协办消息。
消息中心提供了一套机制,允许业务通过预置事件方式来,干预消息中心消息的推送过程,过滤消息,达到业务目的。
最新版本中,业务需要通过以下两步骤来使用该功能:
步骤1:消息中心事件表中注册业务事件;
在开发平台中表单msg_eventlisteners预览中插入业务事件监听记录,如下图所示:
业务对象编码:为业务单据编码,与消息对象中的业务编码需要一致;
消息类型编码:监听的消息类型,可选范围通常为
[*|message|alarm|warning|task|...],可以使用*号代替所有类型;
事件数据:注册监听事件,json格式,数据根据业余插件需求而定:
{ "eventListeners": [{ "event": "bizInterveneSendMsg", "userDefinied": true, "implementationtype": "class", "appId": "hsas", "implementation": "kd.xxx.SubscribeMessageResult", "methodName": "calculateInterveneMessage" }] } | 1.event:事件名称,固定不变; 2.userDefinied:是否为用户定义,固定不变; 3.implementationtype:实现类型,使用class; 4.appId:业务插件部署的服务节点应用ID; 5.implementation:业务插件全路径; 6.methodName: 业务插件中计算方法; |
步骤2:业务插件实现消息中心事件接口,并按照要求实现方法:
package kd.bos.message.api;
import java.util.Map;
/**
* 业务通过订阅消息中心事件方式,预制事件数据在消息中心,使用以下功能:
* 1.订阅消息推送成功结果 2.订阅消息推送失败结果 3.干预消息推送过程
*/
public interface IMsgEventListener {
/**
* 消息推送干预操作接口,业务可以实现该接口,干预本业务下消息发送逻辑
* @param param 包含四种类型信息 entityNumber |businessKey |msgId |channelMsgId
* @return boolean 业务通过计算之后,判断该消息是仍需要发送,continueSend=[true|false]
*/
default boolean calculateInterveneMessage(Map<String, Object> param){
return true;
}
}
3.业务订阅消息实时推送结果
业务通过消息中心接口推送消息,消息中心将消息ID返回给业务,这里有一个问题。业务并不知道各个渠道消息是否真的推送成功,消息中心推送该项功能,业务可以通过注册事件,订阅消息中心回执的方式,获取到渠道消息的推送结果。
业务需要通过以下两步骤来使用该功能:
步骤1:消息中心事件表中注册订阅事件;
订阅事件的注册方式可以参考4.7.3业务干预消息推送章节;
Fdata:注册订阅数据,json格式,数据根据业余插件需求而定:
{ "eventListeners": [{ "event": "failOfSendMsg", "userDefinied": true, "implementationtype": "class", "appId": "hsas", "implementation": "kd.xxx.SubscribeMessageResult", "methodName": "subSuccessMsgInfo" }, { "event": "successOfSendMsg", "userDefinied": true, "implementationtype": "class", "appId": "hsas", "implementation": "kd.xxx.SubscribeMessageResult", "methodName": "subFailMsgInfo" }] } |
1.event:事件名称,failOfSendMsg-订阅失败消息、successOfSendMsg-订阅成功消息 2.userDefinied:是否为用户定义,固定不变; 3.implementationtype:实现类型,使用class; 4.appId:业务插件部署的服务节点应用ID; 5.implementation:业务插件全路径; 6.methodName: 业务插件中计算方法; |
步骤2:业务插件实现消息中心事件接口,并按照要求实现方法:
package kd.bos.message.api; import java.util.Map; /** * 业务通过订阅消息中心事件方式,预制事件数据在消息中心,使用以下功能: * 1.订阅消息推送成功结果 2.订阅消息推送失败结果 3.干预消息推送过程 */ public interface IMsgEventListener { /*** * 推送成功消息回执方法 * @param msgId * @param data */ void subSuccessMsgInfo(Long msgId, Map<String, Object> data); /*** * 推送失败消息回执方法 * @param msgId * @param data */ void subFailMsgInfo(Long msgId, Map<String, Object> data); } |
步骤3:业务通过该接口,可以获取到消息的以下数据:
属性 | 类型 | 描述 |
msgId | Long | 消息id(t_wf_message主键) |
data | Map | data:{ channelMsgId :xxxxx, //渠道消息ID(t_wf_msgfail主键) state : "success | fail", //消息状态 errorinfo : "xxxx", //失败消息原因 retries : 0, //失败消息重试次数 } |
相关文档:
消息日志介绍
本文2024-09-23 00:33:52发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140272.html