一、在springboot项目中使用Rabbitmq
业务模型图如下:
使用rabbitMQ的routing交换机模式,视频处理程序监听视频处理队列
二、消息发送端使用步骤:
2.1首先引入rabbitmq的启动依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.2rabbitmq的参数配置 及Queue队列名称和rountingkey配置
#rabbitmq连接参数
spring
rabbitmq
host:localhost
port:5672
username:lq
password:123456
# 队列和rounting-key配置
xc‐service‐manage‐media:
mq:
queue‐media‐video‐processor: queue_media_video_processor
routingkey‐media‐video: routingkey_media_video
2.3、RabbitMQ配置如下:
下面的配置类代码,生产方和消费方都是需要写的,因为不知道哪一方先启动,因此为了两方都不报错,所以 两方都配置。
@Configuration
public class RabbitMQConfig {
//Exchange
public static final String EX_MEDIA_PROCESSTASK = "ex_media_processor";
//视频处理队列
@Value("${xc‐service‐manage‐media.mq.queue‐media‐video‐processor}")
public String queue_media_video_processtask;
//视频处理路由
@Value("${xc‐service‐manage‐media.mq.routingkey‐media‐video}")
public String routingkey_media_video;
/***
* 配置一个交换机 Bean
* @return the exchange
* */
@Bean(EX_MEDIA_PROCESSTASK)
public Exchange EX_MEDIA_VIDEOTASK() {
return ExchangeBuilder.directExchange(EX_MEDIA_PROCESSTASK).durable(true).build();
}
//声明一个队列 Bean
@Bean("queue_media_video_processtask")
public Queue QUEUE_PROCESSTASK() {
Queue queue = new Queue(queue_media_video_processtask, true, false, true);
return queue;
}
/*** 队列 与交换机进行绑定(指定能够映射到这个队列的 rounting-key的规则)
*
* @param queue the queue
* * @param exchange the exchange
* * @return the binding
* */
@Bean
public Binding binding_queue_media_processtask(@Qualifier("queue_media_video_processtask") Queue queue, @Qualifier(EX_MEDIA_PROCESSTASK) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(routingkey_media_video).noargs();
}
}
2.4消息发送代码:
2.5进行消息校验
发送过去的消息 可以在rabbitmq的web界面端进行校验,查看交换器、队列是否创建,,消息是否发送过去。
三、消息接收端使用步骤
3.1接收端的代码:
注意:
- 每个使用了
@RabbitListener
注解的方法,可以用来监听队列。queues={}
,大括号中可以写多个队列名,,用来监听多个队列。 - 方法的这3个形参,都可以拿到发送端发来的消息。
参数1:是消息字符串,把发送端发送的消息 转成了字符串。
参数2:消息对象,里面有很多消息相关的属性
参数3:通道,是一种原始的方式,,通过这种方式也可以拿到。