2026/1/9 5:29:41
网站建设
项目流程
vip影视建设网站官网,外贸订单从哪里接,深圳住房和建设局网站预约,注册一个投资公司需要多少钱十分钟上手 RabbitMQ#xff1a;Docker 部署 Spring Boot 自动化配置全攻略 喜欢还是喜欢#xff0c;但可惜就是可惜。 文章目录十分钟上手 RabbitMQ#xff1a;Docker 部署 Spring Boot 自动化配置全攻略前言场景复现#xff1a;糟糕的串行设计救星登场#xff1a;异步…十分钟上手 RabbitMQDocker 部署 Spring Boot 自动化配置全攻略喜欢还是喜欢但可惜就是可惜。文章目录十分钟上手 RabbitMQDocker 部署 Spring Boot 自动化配置全攻略前言场景复现糟糕的串行设计救星登场异步解耦一、消息队列的核心作用二、Docker极速安装RabbitMQ1.确保已经安装了Docker可以查询一下别的博客十分快捷。2.推荐的 Docker 启动命令三、核心实操部分Spring Boot1. 极速整合 (Dependency)2. 最简配置 (Configuration)3. 生产者一行代码发送 (Producer)4. 消费者一个注解监听 (Consumer)它的默认行为是什么总结前言场景复现糟糕的串行设计故事背景假设你正在做一个电商系统的“用户注册”功能。产品经理提了三个要求用户填表单存入数据库。发一条欢迎短信。发一封激活邮件。送 100 积分。传统做法串行/同步 代码逻辑是Save User-Send SMS-Send Email-Add Points算一笔账痛点存库50ms发短信调三方接口100ms发邮件网络延迟100ms送积分50ms用户等待总时长300ms。致命伤如果“发邮件”的服务挂了或者网络超时整个注册请求就报错回滚了。用户明明注册了却提示失败体验极差。救星登场异步解耦引入 MQ 后 代码逻辑变为Save User-Send Message to MQ-Return Success。再算一笔账爽点存库50ms发消息给 MQ极快5ms用户等待总时长55ms性能提升 5-6 倍。至于发短信、发邮件由后台的消费者慢慢处理用户根本感知不到。即使邮件服务挂了消息还在 MQ 里修好服务后再消费即可注册功能不受影响。一、消息队列的核心作用异步 (Asynchronous)解释就像你去餐厅点餐。同步是厨师没做完你不能走必须站在窗口等异步是你点完单拿个号牌找地方坐下玩手机饭好了自然会叫你。价值提升系统吞吐量和响应速度。解耦 (Decoupling)解释上面的例子中注册服务A不再依赖邮件服务B。A 只需要把信扔进邮筒MQ至于 B 什么时候拿、怎么拿、甚至 B 换成了 CA 都不用关心。价值系统之间不再“强绑定”降低维护成本。削峰 (Peak Shaving)解释这是高并发系统的保命符。比喻双 11 零点几亿请求涌入。如果直接打到数据库数据库瞬间崩溃。MQ 就像一个大水库先把洪水蓄起来然后按照数据库能承受的速度慢慢往下游放水。价值保护脆弱的下游服务不被流量压垮。二、Docker极速安装RabbitMQ1.确保已经安装了Docker可以查询一下别的博客十分快捷。2.推荐的 Docker 启动命令命令行docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management命令参数详解docker run启动容器。如果本地没有镜像Docker 会自动帮我们下载Pull实现“免安装”体验。-d后台运行Detached让容器在后台默默工作不占用当前终端窗口。--name rabbitmq给容器起个名字叫rabbitmq方便后续管理。-p 5672:5672核心端口。Java 代码连接 MQ 用这个端口。-p 15672:15672管理后台端口。浏览器访问控制台用这个端口。rabbitmq:3-management重点一定要选带management后缀的镜像否则无法使用 Web 管理界面。验证成果访问浏览器http://localhost:15672默认账号密码guest/guest三、核心实操部分Spring Boot这里不使用原生的 amqp-client做介绍了而是直接使用springboot来是使用rabbitmq这才是我们真正实用的场景省略了很多繁琐的步骤。1. 极速整合 (Dependency)只需引入一个 starterSpring 帮你做了 90% 的工作自动配置连接工厂、连接池等。XMLdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependency2. 最简配置 (Configuration)只要配个 IP 和 密码就能连其他复杂的参数 Spring Boot 都给了最佳默认值”。YAMLspring:rabbitmq:host:localhost port:5672username:guest password:guest3. 生产者一行代码发送 (Producer)这里介绍RabbitTemplate。它是 Spring 提供的“神兵利器”。重点为了演示最简单的效果我们先不搞复杂的交换机直接发给一个具体的队列。SpringBootTestpublicclassRabbitMqTest{AutowiredprivateRabbitTemplaterabbitTemplate;TestpublicvoidtestSimpleSend(){// 这里的 simple_queue 是队列名// 也就是默认交换机直接根据路由键匹配队列StringqueueNamesimple_queue;StringmessageHello, RabbitMQ!;rabbitTemplate.convertAndSend(queueName,message);System.out.println(消息已发送message);}}4. 消费者一个注解监听 (Consumer)这里介绍RabbitListener。推荐写法最简自动声明队列ComponentpublicclassSimpleConsumer{// 监听 simple_queue 队列RabbitListener(queuesToDeclareQueue(namesimple_queue))publicvoidreceiveMessage(Stringmessage){System.out.println(消费者收到消息: message);}}它的默认行为是什么当你只写Queue(name simple_queue)时Spring 会创建一个最标准的队列持久化 (Durable: true)RabbitMQ 重启后队列还在默认是 true这点很好防止丢数据。非排他 (Exclusive: false)别的连接也能访问这个队列。非自动删除 (AutoDelete: false)消费者断开后队列不会被自动删除。总结本章我们要点回顾核心价值理解了 MQ 如何通过异步处理将接口响应时间从 500ms 压缩至 50ms。环境准备掌握了 Docker 极速部署 RabbitMQ 的标准姿势。代码实战体验了 Spring Bootstarter-amqp的开箱即用通过注解完成了消息的生产与消费。目前的 Demo 代码中我们使用的是 默认交换机Default Exchange。 这本质上是一种“点对点”的通信模式表现得就像我们直接把消息发到了队列中一样但这其实掩盖了 RabbitMQ 真正的路由能力。但在微服务架构中“广播”Pub/Sub和**“路由”**Routing才是更常见的需求。比如如何实现“所有日志都存库但只有 Error 级别的日志才发报警”光靠指定queue名字是做不到的。下一章我们将深入 RabbitMQ 的心脏解析Fanout广播、Direct直连、Topic主题三大核心模式让你的消息系统真正“活”起来以上内容有任何不足欢迎各位指正。如果文章对您有所帮助请务必点赞收藏您的支持就是我的最大动力