1. solid_notify_def(通知定义表)
Field
|
Type
|
Comment
|
---|---|---|
id | bigint(20) NOT NULL | 自增主键 |
name | varchar(40) NOT NULL | 通知名称 |
impl_class | varchar(400) NOT NULL | 通知的实现类 |
method | varchar(20) NOT NULL | 通知的方法名称 |
max_retry_times | int(11) NOT NULL | 最大重试次数,-1表示unlimited |
max_retry_interval | int(11) NOT NULL | 最大重试间隔,以分钟为单位 |
alert_trigger_type | tinyint(4) NOT NULL | 报警触发类型,0 - 最终失败, 1 - 失败, 2 - NEVER |
varchar(400) NOT NULL | 调用失败后通知人邮件,注意调用失败是指经过若干次重试后超过最大重试次数后失败,逗号分隔 | |
description | varchar(400) NULL | 对该通知定义的描述 |
retry_interval | varchar(400) NOT NULL | 重试间隔,可为固定长度或列表或策略类或表达式,s - 秒,m - 分钟,h - 小时, d - 天 |
2. solid_notify_msg(通知消息表)
Field
|
Type
|
Comment
|
---|---|---|
id | bigint(20) NOT NULL | 自增主键 |
def_id | bigint(20) NOT NULL | 通知定义id |
param | text NULL | 通知参数 |
description | text NULL | 描述信息,如该通知的一些上下文信息 |
errors | text NULL | 调用失败记录的错误信息 |
status | tinyint(4) NOT NULL | 该通知的状态,0 - 未发送, 1 - 发送成功, 2 - 发送失败, 3 - 发送最终失败 |
retry_times | int(11) NOT NULL | 重试次数 |
last_call_time | datetime NULL | 最后调用时间 |
nex_call_time | datetime NULL | 下次执行时间 |
create_time | datetime NOT NULL | 该通知最初创建时间 |
3. solid_notify_msg_history(通知消息历史表)
和通知消息表表结构完全一样,历史表主要用来将已经是成功状态或者最终失败状态的消息从通知消息表中移除,以免通知消息表中积攒太多消息影响性能。
@Override
@Transactional
public SolidNotifyMsgWithBLOBs addNotice(String defName, String param, String description) {
final SolidNotifyMsgWithBLOBs solidNotifyMsgWithBLOBs = new SolidNotifyMsgWithBLOBs();
SolidNotifyDef solidNotifyDef = getDefByName(defName);
solidNotifyMsgWithBLOBs.setDefId(solidNotifyDef.getId());
solidNotifyMsgWithBLOBs.setParam(param);
solidNotifyMsgWithBLOBs.setDescription(description);
solidNotifyMsgWithBLOBs.setCreateTime(new Date());
solidNotifyMsgWithBLOBs.setStatus(SolidNotifyMsgStatus.NOT_SEND.getValue());
solidNotifyMsgWithBLOBs.setRetryTimes(0);
solidNotifyMsgWithBLOBs.setNexCallTime(Calendar.getInstance().getTime());
solidNotifyMsgMapper.insert(solidNotifyMsgWithBLOBs);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
SolidNotifyDef solidNotifyDef = solidNotifyDefMapper.selectByPrimaryKey(solidNotifyMsgWithBLOBs.getDefId());
sendNotice(solidNotifyMsgWithBLOBs, solidNotifyDef);
}
});
return solidNotifyMsgWithBLOBs;
}
@Override
public void syncToOmp(SolidNotifyMsgWithBLOBs solidNotifyMsgWithBLOBs) {
try {
DspInfo dspInfo = JSONObject.parseObject(solidNotifyMsgWithBLOBs.getParam(), DspInfo.class);
sendToOmp(dspInfo);
} catch (Exception e) {
logger.error("syncToOmp failed", e);
throw new NexException("syncToOmp failed", e);
}
}
3. 在solid_notify_def表中增加了一条记录:
id
|
name
|
impl_class
|
method
|
max_retry_times
|
max_retry_interval
|
alert_trigger_type
|
email
|
description
|
retry_interval
|
---|---|---|---|---|---|---|---|---|---|
1 | syncToOmp | com.netease.ad.b.nex.service.dspinfo.DspInfoService | syncToOmp | 2 | -1 | 0 | bjlihaiwu@corp.netease.com | 同步dsp信息到运管平台 | 5m |
本文来自网易实践者社区,经作者李海武授权发布。