博客
关于我
RabbitMQ
阅读量:797 次
发布时间:2023-03-01

本文共 2632 字,大约阅读时间需要 8 分钟。

RabbitMQ入门与实战

一、RabbitMQ简介

RabbitMQ是一种高效的消息队列系统,广泛应用于异步处理、应用解耦和流量削锋等场景。它通过生产者、消费者和交换机实现消息的高效传递,解决了传统异步通信的性能瓶颈。

消息队列的作用

消息队列(Message Queue,简称MQ)主要用于不同应用程序之间的异步通信。其核心功能是存储和转发消息,支持高并发、可靠和可扩展的场景。常见用途包括订单系统通知库存系统、秒杀活动流量削锋以及日志处理等。

RabbitMQ的特点

  • 高性能:支持大量消息吞吐量。
  • 可靠:消息持久化,确保消息不丢失。
  • 可扩展:通过集群部署,水平扩展消息队列服务。
  • 最终一致性:通过消息确认机制,保证消息可靠传输。

二、RabbitMQ安装部署

1. 安装前准备

确保宿主机安装了Docker环境,并可通过命令执行:

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

2. 获取RabbitMQ镜像

通过Docker搜索镜像:

docker search rabbitmq:management

下载镜像并运行:

docker pull rabbitmq:management
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

3. RabbitMQ管理平台访问

访问地址:http://宿主IP:15672,默认账号密码为guest/guest。

三、RabbitMQ生产者和消费者配置

1. 创建Spring Boot项目

新建一个Maven项目,添加依赖:

org.springframework.boot
spring-boot-starter-amqp

2. 生产者配置

package com.cdl.rabbitmqprovider.config;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(String routingKey) {
rabbitTemplate.convertAndSend("exchange", routingKey, "消息内容");
}
}

3. 消费者配置

package com.cdl.rabbitmqconsumer.config;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class Receiver {
@RabbitListener(queues = "exchange")
public void process(String msg) {
System.out.println("接收消息:" + msg);
}
}

四、RabbitMQ交换机

交换机类型

  • 直连交换机:消息按路由键直接发送至队列。
  • 主题交换机:消息按规则发送至多个队列。
  • 扇形交换机:消息广播至所有绑定的队列。
  • 默认交换机:自动与新队列绑定。
  • 死信交换机:处理超时或未确认消息。
  • 直连交换机配置

    package com.cdl.rabbitmqprovider.config;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.DirectExchange;
    import org.springframework.amqp.core.Queue;
    import org.springframework.context.annotation.Bean;
    @Configuration
    public class RabbitmqDirectConfig {
    @Bean
    public DirectExchange directExchange() {
    return new DirectExchange("exchange_direct");
    }
    @Bean
    public Queue directQueue() {
    return new Queue("queue_direct");
    }
    @Bean
    public Binding directBinding() {
    return BindingBuilder.bind(directQueue())
    .to(directExchange())
    .with("routing_key");
    }
    }

    五、延迟队列实现

    1. Dead Letter Exchange(死信交换机)

    通过设置队列的过期时间和死信交换机,实现消息延迟和重试。

    2. 消息投递

    生产者发送消息至直连交换机,消息在预定时间过期后转入死信队列。

    3. 消息消费

    消费者订阅死信队列,处理超时或失败的消息。

    6. RabbitMQ的优势

    • 高性能:处理大规模消息吞吐。
    • 可靠性:保证消息不丢失。
    • 可扩展性:支持横向扩展。
    • 灵活性:支持多种交换机类型。

    通过以上配置和实践,RabbitMQ可以有效解决异步通信、流量削锋等问题,是一款值得深入探索的高效消息队列系统。

    转载地址:http://natfk.baihongyu.com/

    你可能感兴趣的文章