使用数据库统一对通知管理

最近在项目中,运用到了改变用户状态,实现消息推送的功能,开始找了很多资料,都和实际的项目运用的不相符合,这里总结下项目中如何解决问题(一般是使用观察者模式),有兴趣的可以具体了解,感觉和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的数据,然后推送给接收人,同时,接收人操作之后改变状态,不发送消息,(否则会定时发送消息,直到接收人处理之后)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值