配置消息过期时间(TTL): https://www.jianshu.com/p/341c63cf0459
过期时间可以设置整个队列,也可以设置单条数据,同时设置以时间最短的为准。
死信队列(DLX):
将过期或队列满了放不下的消息,发送到死信交换机,通过死信交换机再发送到指定的队列。达到收集过期消息的目的。
延时队列:
过期时间配合私信队列可实现延时队列。设置一定的过期时间,消息到达过期时间后,由死信交换机发送到指定的队列,最后消费者去监听这个指定的队列即可。
pom:
<!--RabbitMQ依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
yml:
spring:
rabbitmq:
#RabbitMQ部署服务器ip
host: 127.0.0.1
#RabbitMQ端口
port: 5672
#用户名
username: june
#密码
password: 123456
#虚拟主机
virtual-host: /VirtualTest
主启动:
@SpringBootApplication
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
RabbitMQ工作模式:
1、工作队列模式-使用默认的交换机:生产者直接发送消息到队列,消费者到队列拿到。设置多个消费者,可实现多个消费者抢消息的功能。
2、路由模式:1对1发送消息,或者1对多分发消息。生产者通过exchange交换机不同的路由key,将消息分发到不同的消息队列。
3、通配符模式:路由模式升级版。使用exchange交换机,是路由模式的升级版,在给队列绑定key的时候使用通配符。通过通配符可以实现,消息发送给指定的多个队列。
订阅模式:类似于群发消息。使用exchange交换机,统一分发信息到绑定该交换机的所有队列。
配置类:
package com.student.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 作者:June
* @author June
*/
@Configuration
public class RabbitMQConfig {
//交换机名称
public static final String EXCHANGE = "exchangeBoot";
//队列名称
private static final String QUEUE1 = "queueBoot1";
//队列名称
private static final String QUEUE2 = "queueBoot2";
//注册交换机
@Bean
public Exchange exchange() {
/* 交换机模式:
* fanout:订阅模式
* topic:通配符模式
* direct:路由模式
* headers:
* */
return ExchangeBuilder.topicExchange(EXCHANGE).durable(true).build();
}
//注册队列
@Bean
public Queue queue1() {
return QueueBuilder.durable(QUEUE1).build();
}
//注册队列
@Bean
public Queue queue2() {
return QueueBuilder.durable(QUEUE2).build();
}
//绑定队列和交换机
@Bean
public Binding itemQueueExchange1(@Qualifier("queue1")Queue queue1, @Qualifier("exchange")Exchange exchange) {
//参数依次是队列对象、交换机对象、路由key
return BindingBuilder.bind(queue1).to(exchange).with("queue.*").noargs();
}
//绑定队列和交换机
@Bean
public Binding itemQueueExchange2(@Qualifier("queue2")Queue queue2, @Qualifier("exchange")Exchange exchange) {
//参数依次是队列对象、交换机对象、路由key
return BindingBuilder.bind(queue2).to(exchange).with("queue.*").noargs();
}
}
controller:
package com.student.controller;
import com.student.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 作者:June
*/
@RestController
public class ProducerController {
@Autowired
private RabbitTemplate rabbitTemplate;
@RequestMapping("/producer")
public String produce(String message, String key) {
//发送消息
/*
* 参数1:交换机名称
* 参数2:路由key
* 参数3:发送的消息
* */
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE,key,message);
return "发送消息成功!!!";
}
}