最近在项目中,运用到了改变用户状态,实现消息推送的功能,开始找了很多资料,都和实际的项目运用的不相符合,这里总结下项目中如何解决问题(一般是使用观察者模式),有兴趣的可以具体了解,感觉和activeMQ的机制很像,实现发布订阅和点对点的模式等等。
项目中的办法是,使用一张中间表对数据统一进行管理,具体表结构如下:
使用的示例代码如下:
SysMessage sysMessage = new SysMessage();
sysMessage.setCreated(new Date());
sysMessage.setContext("用户发起整改验收申请,通知验收人验收");
sysMessage.setSender(qsOptimizeInfoDto.getOwner());//执行人id
sysMessage.setReceiver(qsOptimizeInfoDto.getValidator());//验收人id
sysMessage.setType(5);//qsOpt(5, "QUALITY_OPTIMIZE")整改验收类
sysMessage.setState("unpush");
try {
sysMessageMapper.insertSelective(sysMessage);
log.info("sysMessage-->{}", "验收申请消息推送成功");
} catch (Exception e) {
e.printStackTrace();
log.info("sysMessage-->{}", "验收申请消息推送失败");
}
使用这种方式,定时任务会自动检测,数据库中sys_message的表中state状态为unpush的数据,然后推送给接收人,同时,接收人操作之后改变状态,不发送消息,(否则会定时发送消息,直到接收人处理之后)。