RabbitMQ
直连交换机:消息按路由键直接发送至队列。 主题交换机:消息按规则发送至多个队列。 扇形交换机:消息广播至所有绑定的队列。 默认交换机:自动与新队列绑定。 死信交换机:处理超时或未确认消息。
发布日期:2025-05-04 17:50:35
浏览次数:6
分类:精选文章
本文共 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:managementdocker 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;@Componentpublic 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;@Componentpublic 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;@Configurationpublic 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可以有效解决异步通信、流量削锋等问题,是一款值得深入探索的高效消息队列系统。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2026年06月06日 09时40分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php接口返回状态,大家一般怎么规范接口返回内容
2023-03-01
php接收formdata上传的多个文件,使用formData()上传多个文件
2023-03-01
PHP操作csv文件导入+导出
2023-03-01
php操作mysql用select_php如何操作mysql获取select 结果
2023-03-01
PHP操作符与控制结构
2023-03-01
PHP支付宝SDK使用,电脑网页支付
2023-03-01
php支付宝手机网页支付类实例
2023-03-01
PHP改变数组key值的方法
2023-03-01
php教程之php空白页的原因及解决方法
2023-03-01
PHP数据库操作
2023-03-01
PHP数据文件过大,导致PHP加速器eaccelerator在PHP5.2版本下崩溃
2023-03-01
RabbitMQ - 死信、TTL原理、延迟队列安装和配置
2023-03-01
PHP数据访问的多重查询(租房子查询)
2023-03-01
RabbitMQ - 如保证消息的可靠性?(消息确认、消息持久化、失败重试机制)
2023-03-01
RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
2023-03-01
php数组函数分析--array_column
2023-03-01
php数组去重复数据的小例子
2023-03-01
php数组实现:哈希 +双向链表
2023-03-01
PHP数组排序函数array_multisort()函数详解(二)
2023-03-01
php数组的几个函数和超全局变量
2023-03-01