欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

RabbitMQ 知识总结与回顾 - 目录

最编程 2024-05-04 21:51:04
...

首先,确保你的Spring Boot项目中已经添加了RabbitMQ的依赖。如果你使用Maven,可以在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

19.2 配置RabbitMQ连接信息

application.propertiesapplication.yml中配置RabbitMQ连接信息:

spring.rabbitmq.addresses=your_rabbitmq_server_address
spring.rabbitmq.username=your_username
spring.rabbitmq.password=your_password
spring.rabbitmq.virtual-host=your_virtual_host

19.3 定义死信队列和延迟队列

其实没有专门的queue类型是死信队列,都是普通的queue类型,只是在普通的queue中设置了x-dead-letter-exchange,然后指定另一个队列来接收这个队列超时未消费的消息,接收的那个队列就称作死信队列,这个设置了超时的队列,可以暂且叫它延迟队列吧。死信队列(DLQ)是用于存储无法被正常消费的消息。可以创建一个普通的队列作为延迟队列,然后配置其TTL(生存时间)和死信交换机,使得当消息在延迟队列中生存时间超过TTL后,消息会被发送到死信队列。

@Bean
public Queue delayQueue() {
    Map<String, Object> arguments = new HashMap<>();
    arguments.put("x-dead-letter-exchange", "deadLetterExchange");
    arguments.put("x-dead-letter-routing-key", "deadLetterRoutingKey");
    arguments.put("x-message-ttl", 5000); // 设置消息的TTL为5000毫秒
    return new Queue("delayQueue", true, false, false, arguments);
}

@Bean
public Queue deadLetterQueue() {
    return new Queue("deadLetterQueue", true, false, false);
}

@Bean
public Exchange deadLetterExchange() {
    return new DirectExchange("deadLetterExchange", true, false);
}

19.4绑定死信队列

将死信队列绑定到死信交换机,并指定路由键:

@Bean
public Binding deadLetterBinding(Queue deadLetterQueue, Exchange deadLetterExchange) {
    return BindingBuilder.bind(deadLetterQueue).to(deadLetterExchange).with("deadLetterRoutingKey");
}

19.5 发送消息到延迟队列

 发送消息到delayQueue,消息将被存储直到TTL过期:

@Autowired
private RabbitTemplate rabbitTemplate;

public void sendDelayedMessage(String message) {
    rabbitTemplate.convertAndSend("delayQueue", message);
}

19.6 消费死信队列中的消息

创建一个消费者监听死信队列,以处理过期的消息:

@Component
public class DeadLetterConsumer {

    @RabbitListener(queues = "deadLetterQueue")
    public void receiveDeadLetter(String message) {
        // 处理死信消息
        System.out.println("Received dead letter message: " + message);
    }
}

通过以上步骤,在Spring Boot应用中整合RabbitMQ,并通过死信队列特性实现延迟队列的效果。消息在延迟队列中超过预设的TTL后,将自动成为死信,并被发送到配置的死信队列中,从而实现了延迟处理消息的需求。

个人感觉RabbitMQ比RocketMQ和Kafka要简单,而且管理起来也方便,而且RabbitMQ性能也不错,而且功能也能满足绝大部分企业项目要求,可以作为首选。

推荐阅读