概述
在新建得业务服务中集成RabbitMQ,用以解决高并发离线下载腾讯云文件。
1、引入依赖
<!--添加rabbitmq依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、配置文件
# rabbitmq
spring.rabbitmq.host=192.168.0.88
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
3、配置队列、交换器、路由等高级信息
package com.cxbdapp.hbhtyyBackground.config;
import cn.hutool.core.util.StrUtil;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 附件类型 1、原始IM消息记录文件 2、IM中的图片文件 3、IM中的语音文件 4、IM中的视频文件 5、IM消息记录文件 6、录制回调单路视频json记录文件 7、录制回调单路视频文件 8、录制回调混流视频json记录文件 9、录制回调混流视频文件
*
* @author zxy
* @description 用来配置队列、交换器、路由等高级信息
* @date 2020-12-01 15:40:00
*/
@Configuration
public class MQConfig {
private static final String PROFILES_ACTIVE = "dev";
public static final String QUEUE_MQ_TEST = PROFILES_ACTIVE + StrUtil.DASHED + "hbhtyy-queue-test";
public static final String QUEUE1_DOWNLOAD_ORIGINAL_IM_JSON = PROFILES_ACTIVE + StrUtil.DASHED + "hbhtyy-queue1-downloadOriginalIMJson";
public static final String QUEUE5_DOWNLOAD_IM_JSON = PROFILES_ACTIVE + StrUtil.DASHED + "hbhtyy-queue5-downloadIMJson";
public static final String QUEUE68_DOWNLOAD_VIDEO_JSON = PROFILES_ACTIVE + StrUtil.DASHED + "hbhtyy-queue68-downloadVideoJson";
public static final String QUEUE79_DOWNLOAD_VIDEO_JSON_FILE = PROFILES_ACTIVE + StrUtil.DASHED + "hbhtyy-queue79-downloadVideoJsonFile";
/**
* 测试程序
*
* @return Queue
*/
@Bean(name = "queueMqTest")
public Queue queueMqTest() {
return new Queue(QUEUE_MQ_TEST);
}
/**
* 下载【原始IM消息记录文件】
*
* @return Queue
*/
@Bean(name = "queue1DownloadOriginalIMJson")
public Queue queue1DownloadOriginalIMJson() {
return new Queue(QUEUE1_DOWNLOAD_ORIGINAL_IM_JSON);
}
/**
* 下载【IM消息记录文件】
*
* @return Queue
*/
@Bean(name = "queue5DownloadIMJson")
public Queue queue5DownloadIMJson() {
return new Queue(QUEUE5_DOWNLOAD_IM_JSON);
}
/**
* 下载【录制回调单路视频json记录文件、录制回调混流视频json记录文件】
*
* @return Queue
*/
@Bean(name = "queue68DownloadVideoJson")
public Queue queue68DownloadVideoJson() {
return new Queue(QUEUE68_DOWNLOAD_VIDEO_JSON);
}
/**
* 下载【录制回调单路视频文件、录制回调混流视频文件】
*
* @return Queue
*/
@Bean(name = "queue79DownloadVideoJsonFile")
public Queue queue79DownloadVideoJsonFile() {
return new Queue(QUEUE79_DOWNLOAD_VIDEO_JSON_FILE);
}
}
4、生产者生产消息
package com.cxbdapp.hbhtyyBackground.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
* @author zxy
* @description 生产者发送消息
* @date 2020-12-01 15:40:00
*/
@Slf4j
@Component
public class MqSender {
@Autowired
private AmqpTemplate rabbitTemplate;
@Resource(name = "queueMqTest")
private Queue queue;
@PostConstruct
public void sendTest() {
log.info("queue name: " + queue.getName());
log.info("queue message: " + ("mq测试消息,队列名为:" + queue.getName()));
rabbitTemplate.convertAndSend(queue.getName(), "mq测试消息,队列名为:" + queue.getName());
}
}
5、RabbitMQ监听类,消费者消费消息
监听类
package com.cxbdapp.hbhtyyBackground.rabbitmq;
import com.cxbdapp.hbhtyyBackground.config.MQConfig;
import com.cxbdapp.hbhtyyBackground.service.MqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 附件类型 1、原始IM消息记录文件 2、IM中的图片文件 3、IM中的语音文件 4、IM中的视频文件 5、IM消息记录文件 6、录制回调单路视频json记录文件 7、录制回调单路视频文件 8、录制回调混流视频json记录文件 9、录制回调混流视频文件
*
* @author zxy
* @description RabbitMQ监听类,提供消费对应消息队列名消息的接口
* @date 2020-12-01 15:40:00
*/
@Slf4j
@Component
public class MqReceiver {
@Autowired
private MqService mqService;
/**
* 监听消息测试程序
*
* @param message 消息
*/
@RabbitListener(queues = MQConfig.QUEUE_MQ_TEST)
public void mqTestListener(String message) {
log.info("MQ test: message: " + message);
}
/**
* 监听【下载【原始IM消息记录文件】】消息
*
* @param message 消息
*/
@RabbitListener(queues = MQConfig.QUEUE1_DOWNLOAD_ORIGINAL_IM_JSON)
public void queue1DownloadOriginalIMJson(String message) {
log.info("进入 queue1DownloadOriginalIMJson 函数,message=" + message);
mqService.queue1DownloadOriginalIMJson(message);
}
/**
* 监听【下载【IM消息记录文件】】消息
*
* @param message 消息
*/
@RabbitListener(queues = MQConfig.QUEUE5_DOWNLOAD_IM_JSON)
public void queue5DownloadIMJson(String message) {
log.info("进入 queue5DownloadIMJson 函数,message=" + message);
mqService.queue5DownloadIMJson(message);
}
/**
* 监听【下载【录制回调单路视频json记录文件、录制回调混流视频json记录文件】】消息
*
* @param message 消息
*/
@RabbitListener(queues = MQConfig.QUEUE68_DOWNLOAD_VIDEO_JSON)
public void queue68DownloadVideoJson(String message) {
log.info("进入 queue68DownloadVideoJson 函数,message=" + message);
mqService.queue68DownloadVideoJson(message);
}
/**
* 监听【下载【录制回调单路视频文件、录制回调混流视频文件】】消息
*
* @param message 消息
*/
@RabbitListener(queues = MQConfig.QUEUE79_DOWNLOAD_VIDEO_JSON_FILE)
public void queue79DownloadVideoJsonFile(String message) {
log.info("进入 queue79DownloadVideoJsonFile 函数,message=" + message);
mqService.queue79DownloadVideoJsonFile(message);
}
}
服务类
package com.cxbdapp.hbhtyyBackground.service;
/**
* RabbitMQ服务类
*
* @author zxy
* @date 2020-12-01 15:40:00
*/
public interface MqService {
/**
* 下载【IM原始消息记录文件】
*
* @param message 消息
*/
void queue1DownloadOriginalIMJson(String message);
/**
* 下载【IM消息记录文件】
*
* @param message 消息
*/
void queue5DownloadIMJson(String message);
/**
* 下载【录制回调单路视频json记录文件、录制回调混流视频json记录文件】
*
* @param message 消息
*/
void queue68DownloadVideoJson(String message);
/**
* 下载【录制回调单路视频文件、录制回调混流视频文件】
*
* @param message 消息
*/
void queue79DownloadVideoJsonFile(String message);
}
实现类
package com.cxbdapp.hbhtyyBackground.service.impl;
import com.cxbdapp.hbhtyyBackground.service.MqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* RabbitMQ服务层实现类
*
* @author zxy
* @date 2020-12-01 15:40:00
*/
@Slf4j
@Service
public class MqServiceImpl implements MqService {
@Override
public void queue1DownloadOriginalIMJson(String message) {
}
@Override
public void queue5DownloadIMJson(String message) {
}
@Override
public void queue68DownloadVideoJson(String message) {
}
@Override
public void queue79DownloadVideoJsonFile(String message) {
}
}