quartz+rabbitmq+websocket实现消息推送

注意:在压力测试过程中出现过websocket 连接未销毁的状况,导致tomcat线程耗尽 平台卡死 无法运行的情况,后续优化改为Netty的websocket,本文仅供参考

背景

终端离线检测报警推送,报警是通过定时任务进行检测,检测终端是否离线,如果终端离线则生成报警信息入库,同时需要向web端登录的管理员进行消息实时推送。所有登录的具有离线终端权限的用户都应收到该报警。

实现构想

通过定时任务轮询来检测终端是否离线,如果离线(判断终端的最后心跳时间),则生成报警消息,并保存至数据库,同时,需要将报警消息推送RabbitMq消息服务器,Web 服务启动时会生成报警消息监听队列,监听Mq中的报警消息,web端的管理人员登录云平台后会和后台建立WebSocket连接,在登录期间,如果监听到消息则通过webSocket将消息推送至前端页面对管理人员进行提醒。

流程图

代码实现

CMS定时任务

定时任务采用spring Quartz,

先编写定时任务逻辑代码,spring 配置文件中 添加包扫描即可

<context:component-scan base-package="com.cms.quartz" />
@Component("alarmTask")
@Transactional
public class AlarmTask {
	private static final Logger logger = Logger.getLogger(AlarmTask.class);
	@Autowired
	private AlarmService alarmService;
	/**
	 * 一分钟执行一次
	 */
	@Scheduled(cron="0 0/1 * * * ?")
	public void createAlarm(){
		try {
			alarmService.createAlarm();
		} catch (Exception e) {
		}
	}
}

RabbitMQ生产者

由于所有登录的具有离线停车场权限的用户都应收到该报警,所以报警消息采用fanout(广播)模式,广播模式模型:

流程图2

生产者端只需要在配置spring-rabbit配置文件中声明一个广播的交换路由即可:

<rabbit:fanout-exchange name="mq.remoteParkAlarmMsg" durable="fal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值