<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>队列 on Leanku</title>
    <link>https://blog.leanku.com/tags/%E9%98%9F%E5%88%97/</link>
    <description>Recent content in 队列 on Leanku</description>
    <image>
      <url>https://blog.leanku.com/images/og-cover.jpg</url>
      <link>https://blog.leanku.com/images/og-cover.jpg</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Thu, 08 Aug 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.leanku.com/tags/%E9%98%9F%E5%88%97/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>RabbitMQ 使用指南：从入门到实战</title>
      <link>https://blog.leanku.com/post/queue/rabbitmq-user-guide/</link>
      <pubDate>Thu, 08 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://blog.leanku.com/post/queue/rabbitmq-user-guide/</guid>
      <description>RabbitMQ 使用指南：从入门到实战 一、为什么选择 RabbitMQ？ 在分布式系统中，服务之间的同步调用会带来三个棘手的问题：扩展性差、性能下降、级联失败。消息队列正是解决这些问题的良方，它的价值在于：
异步解耦：生产者发送消息后即可返回，无需等待消费者处理完成，降低了服务间的直接依赖。 流量削峰：消息队列作为缓冲层，可以将突增的请求暂存，让消费者按自己的节奏处理，保护下游系统。 可靠性保障：RabbitMQ 凭借其极高的消息可靠性和微秒级的低延迟，在微服务解耦、实时数据处理场景中表现出色。 与其他消息队列相比，RabbitMQ 的易用性和社区生态的综合分最均衡。据统计，它目前是国内消息队列使用量最大的产品。
特别说明：本文部分示例使用了 php 代码，但 RabbitMQ 的核心概念和配置逻辑是跨语言的。后文也会提供基于 PHP php-amqplib 的代码示例，方便 Hyperf 开发者参考。
二、核心概念：理解消息流转的“骨架” 要熟练使用 RabbitMQ，首先需要理清其核心组件的作用。
四大核心角色：
生产者（Producer）：消息的发送方，负责创建消息并发送到交换机。例如电商系统中，“订单服务”就是生产者，它会发送“订单已创建”的消息。 交换机（Exchange）：接收生产者发送的消息，并根据路由规则将消息分发到对应的队列。注意：交换机不存储消息，若没有匹配的队列，消息会被丢弃。 队列（Queue）：消息的存储容器，用于暂存待消费的消息。队列是线程安全的，一条消息只能被一个消费者消费（默认情况下）。 消费者（Consumer）：消息的接收方，负责从队列中获取消息并处理。例如“库存服务”监听订单队列，收到消息后执行库存扣减。 关键辅助概念：
绑定（Binding）：建立交换机与队列之间的关联，并指定**路由键（Routing Key）**作为匹配规则。没有绑定的交换机无法将消息传递到队列。 虚拟主机（Virtual Host）：RabbitMQ 的“命名空间”，用于隔离不同项目或环境的资源（交换机、队列、用户等）。每个虚拟主机都有独立的权限控制。 三、交换机类型：选择正确的路由策略 交换机是 RabbitMQ 路由消息的核心，不同类型的交换机对应不同的路由逻辑。RabbitMQ 支持 4 种交换机类型：
3.1 Direct 交换机：精确匹配 工作原理：Direct 交换机要求消息的**路由键（Routing Key）与绑定的绑定键（Binding Key）**完全一致，才会将消息路由到对应的队列。
适用场景：一对一的精确路由。例如“订单支付成功后，通知物流系统发货”。
示例：绑定 Q1 队列的绑定键为 order.pay.success，只有路由键完全匹配该值的消息才会进入 Q1。
3.2 Topic 交换机：模糊匹配 工作原理：Topic 交换机支持使用通配符进行模糊匹配：
*：匹配一个单词（例如 user.* 可匹配 user.register，但不匹配 user.register.success） #：匹配零个或多个单词（例如 user.# 可匹配 user.register 和 user.</description>
    </item>
    
  </channel>
</rss>
