springBoot接入rocketMq削峰处理请求

#生产环境修改记录接口频繁调用导致服务器负载高#

一、引入jar包

 <!-- rocketmq 2.2.3-->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.2.3</version>
        </dependency>

二、application.yml 中配置mq连接信息

# rocketmq config
rocketmq:
  name-server: 127.0.0.1:9876
  consumer:
    access-key: username
    secret-key: password
  producer:
    group: xxx
    access-key: username
    secret-key: password

三、创建生产者代码

其中MqConst中的topic、tag常量信息自己定义

package com.beego.web.mq.producer;

import com.beego.model.vo.course.SavePptRecordVo;
import com.beego.web.mq.constant.MqConst;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.apache.rocketmq.spring.support.RocketMQHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;
import java.util.Objects;

/**
 * 保存(视频&直播)播放记录生产者
 *
 * @author zsf
 */
@Component
@Slf4j
@AllArgsConstructor
@EnableAsync
public class SavePlayRecordProduce {
    private final RocketMQTemplate rocketMqTemplate;

    @Async
    public void sendMessage(SavePptRecordVo savePptRecordVo) {
        log.info("发送保存(视频&直播)播放记录:{}", savePptRecordVo);
        if (Objects.nonNull(savePptRecordVo)) {
            rocketMqTemplate.syncSend(MqConst.TOPIC_GOLD_BEEGO_STUDENT+":"+MqConst.TAG_VIDEO_SAVEPPTRECORD,
                MessageBuilder.withPayload(savePptRecordVo).setHeader(RocketMQHeaders.KEYS, savePptRecordVo.getRecordId()).build());
        }

    }

}

四、创建消费者代码

其中MqConst中的topic、tag常量信息自己定义

package com.beego.web.mq.consume;

import com.beego.model.vo.course.SavePptRecordVo;
import com.beego.web.course.service.IDmSpecialTypeService;
import com.beego.web.mq.constant.MqConst;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author zsf
 */
@Slf4j
@Component
@RequiredArgsConstructor
@RocketMQMessageListener(consumerGroup = MqConst.GROUP_GOLD_BEEGO_STUDENT+MqConst.TAG_VIDEO_SAVEPPTRECORD,
    topic = MqConst.TOPIC_GOLD_BEEGO_STUDENT, selectorExpression = MqConst.TAG_VIDEO_SAVEPPTRECORD)
public class SavePlayRecordConsumer implements RocketMQListener<SavePptRecordVo>, RocketMQPushConsumerLifecycleListener {
    @Autowired
    private IDmSpecialTypeService dmSpecialTypeService;

    @Override
    public void onMessage(SavePptRecordVo savePptRecordVo) {
        log.info("接收保存(视频&直播)播放记录:{}", savePptRecordVo);
        dmSpecialTypeService.savePlayRecordMq(savePptRecordVo);
    }

    @Override
    public void prepareStart(DefaultMQPushConsumer consumer) {
        // 每次拉取的间隔,单位为毫秒
        consumer.setPullInterval(1000);
        // 设置每次从队列中拉取的消息数为16 (线上环境10个Broker 默认每个Broker4个队列 则 10*4*8=320 每秒拉取处理320个消息)
        consumer.setPullBatchSize(8);
    }

}

五、serviceImpl中发送消息

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值