场景:我们平台是做冷链数据采集的,和硬件设备对接,采集实时的温湿度和车辆的定位信息,现有3000多硬件设备,每个设备5分钟上传一次数据,这样的数据量上来后直接把服务搞死,cpu过载。
上面这种情况就算数据库做读写分离,分库分表,但是数据一直在写入,CPU一直在飙高,早晚服务会崩溃,所以考虑放到消息队列中。但是放到消息队列中也不能说就没有什么问题,如果入队数据量远远大于出队数据量,那么还是会导致服务出现问题,所以现在的考虑是:使用RocketMq,设备采集的数据直接存入消息队列中,消费者取出存库的操作进行控制,最好的办法是同一时间内,我从消息队列中取出一定的数目进行消费,多余的不再消费,慢慢进行消化,但是有个前提是所要处理的数据是不及时性的,可延迟操作的!
我们在昨天的基础上新建一个方法:
直接上代码吧
final MQPullConsumerScheduleService scheduleService1 = new MQPullConsumerScheduleService("jeemp_producer_group");
scheduleService1.getDefaultMQPullConsumer().setNamesrvAddr("172.16.10.54:9876");
//集群模式
scheduleService1.setMessageModel(MessageModel.CLUSTERING);
//注册拉取回调函数
scheduleService1.registerPullTaskCallback("spring-rocketMQ-topic", new PullTaskC