1 前言
1.1 什么是 RabbitMQ?
RabbitMQ 是一个开源的 消息中间件,基于 AMQP(Advanced Message Queuing Protocol)高级消息队列协议 开发,用于在分布式系统中传递消息、解耦模块、削峰填谷、实现异步处理。
简单理解:RabbitMQ 就像一个快递中转站,负责接收消息、存储消息、转发消息。
1.2 RabbitMQ 有哪些特点?
特点 |
说明 |
📜 协议标准 |
基于 AMQP 协议,跨平台、跨语言 |
🔧 高可靠性 |
支持消息持久化、ACK确认机制、镜像队列(集群时) |
📈 高可用性 |
支持集群、高可用队列,节点挂了也能继续处理 |
🔁 灵活路由 |
支持多种交换机类型(直连、广播、通配符、Header) |
📦 插件系统丰富 |
支持 Web 管理界面、监控、集群管理、Shovel、Federation 等插件 |
🧩 支持多语言客户端 |
Python、Java、Go、Node.js 等都可以使用 |
1.3 核心概念
名称 |
说明 |
Producer(生产者) |
消息的发送者 |
Consumer(消费者) |
消息的接收者 |
Queue(队列) |
存储消息的缓冲区,消息在这里等待被消费者消费 |
Exchange(交换机) |
根据规则将消息分发到不同的队列,可设定分发策略 |
Binding(绑定) |
把队列和交换机按照路由规则连接起来 |
Routing Key |
路由关键字,用于消息在交换机和队列之间分发的依据 |
Message(消息) |
实际传递的数据内容,一般是字符串、JSON 等 |
1.4 四种交换机类型对比]
类型 |
路由规则 |
常见用途 |
fanout |
广播到所有绑定队列 |
广播消息、日志系统 |
direct |
精确匹配 routing_key |
单个/指定消费者 |
topic |
通配符匹配 routing_key |
复杂路由,日志、事件 |
headers |
根据消息 headers 条件匹配 |
header 控制精细路由 |
类型 |
说明 |
应用场景 |
direct |
精确匹配 routing key |
点对点消息 |
fanout |
广播,忽略 routing key,发给绑定的所有队列 |
日志广播、消息通知 |
topic |
模糊匹配,支持 * 和 # 通配符 |
订阅/发布模型,事件匹配 |
headers |
按照 header 属性分发 |
高度定制的路由规则 |
1.5 RabbitMQ 与 Kafka 对比
对比项 |
RabbitMQ |
Kafka |
设计理念 |
消息队列(面向消息) |
日志系统(面向事件) |
传输协议 |
AMQP |
自定义协议(Kafka协议) |
消息持久化 |
默认支持 |
高效磁盘持久化 |
消费模型 |
推(Push)模型 |
拉(Pull)模型 |
消息顺序 |
有序,但集群时需要配置保证顺序 |
分区内严格有序 |
吞吐量 |
中等偏高 |
超高吞吐量,适合大数据流 |
使用场景 |
实时消息通信、业务解耦、异步任务 |
日志采集、行为数据、数据管道 |
1.6 使用场景举例
场景 |
描述 |
🛍️ 电商下单后异步发短信 |
下单成功后,将“发送短信”任务放入消息队列,由异步服务处理 |
🧾 日志异步处理 |
应用不直接写数据库/文件,而是把日志写入 MQ,由后台服务统一处理 |
🎮 游戏事件分发 |
玩家行为被打包成事件,广播给多个服务(比如日志、成就、排行榜) |
📧 邮件通知/延迟任务队列 |
延迟消费邮件、短信等任务,用 TTL + 死信队列实现 |
2 安装
https://www.rabbitmq.com/docs/install-rpm
2.1 CentOS7 安装
2.2 docker安装
# latest RabbitMQ 4.0.x
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4.0-management

2.3 开启管理面板
sudo rabbitmq-plugins enable rabbitmq_management
打开浏览器访问:
http://127.0.0.1:15672
默认账号:guest
,密码:guest

3 交换机类型(python案例)
RabbitMQ 的四种交换机类型:direct
、topic
、fanout
、headers
各有适用场景。
3.1 fanout(广播)
路由规则: 发送到所有绑定队列,不看 routing_key
场景示例:
- 日志系统,一条日志需要发送给多个子系统(存储、邮件、短信、实时通知等)
结构图:
Publisher
|
[Exchange: logs] -- fanout
/ \
[Queue1] [Queue2] <-- 多个消费者绑定
publisher.py
import pika
import json
mq_host = "192.168.56.20"
if __name__ == '__main__':
connection = pika.BlockingConnection(pika.ConnectionParameters(mq_host))
channel = connection.channel()
channel.exchange_declare(exchange='logs', exchange_type='fanout')
data = {
"event": "user_signup",
"username": "cs",
"nickname": "有勇气的牛排",
"timestamp": "2099-01-01 12:00:00"
}
message = json.dumps(data)
channel.basic_publish(exchange='logs', routing_key='', body=message)
print(f"[x] Sent: {message}")
connection.close()
consumer.py
import pika
import json
mq_host = "192.168.56.20"
if __name__ == '__main__':
connection = pika.BlockingConnection(pika.ConnectionParameters(mq_host))
channel = connection.channel()
channel.exchange_declare(
exchange='test',
exchange_type='fanout',
passive=False,
durable=False,
auto_delete=False,
internal=False,
)
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='logs', queue=queue_name)
print('[*] Waiting for messages. To exit press CTRL+C')
def callback(ch, method, properties, body):
data = json.loads(body.decode())
print(f"收到消息:{data}")
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=True)
channel.start_consuming()

3.2 direct(精准路由)
路由规则: 根据 routing_key 精确匹配队列绑定的 key。
场景:系统中不同服务只接收自己关心的消息,如 email
只处理 email 消息,sms
处理短信。
publisher.py
channel.exchange_declare(exchange='direct_logs', exchange_type='direct')
channel.basic_publish(exchange='direct_logs', routing_key='email', body='邮件消息内容')
consumer_email.py
channel.queue_bind(exchange='direct_logs', queue=queue_name, routing_key='email')
consumer_sms.py
channel.queue_bind(exchange='direct_logs', queue=queue_name, routing_key='sms'
3.3 topic(模糊/通配路由)
路由规则: 支持通配符匹配 routing_key:
场景:日志系统:按模块/级别动态订阅,如
- log.error.app1
- log.info.*
log.#
(全接)
publisher.py
channel.exchange_declare(exchange='topic_logs', exchange_type='topic')
channel.basic_publish(exchange='topic_logs', routing_key='log.error.app1', body='Error log')
consumer.py(接收所有 error)
channel.queue_bind(exchange='topic_logs', queue=queue_name, routing_key='log.error.*')
consumer.py(接收所有日志)
channel.queue_bind(exchange='topic_logs', queue=queue_name, routing_key='log.#'
3.4 headers(基于 headers 路由)
路由规则: 不依赖 routing_key,而是根据消息 headers 中的键值匹配。
场景:多条件筛选,如 “user_type=vip” 且 “region=us” 才接收消息。
publisher.py
headers = {'user_type': 'vip', 'region': 'us'}
properties = pika.BasicProperties(headers=headers)
channel.exchange_declare(exchange='header_logs', exchange_type='headers')
channel.basic_publish(exchange='header_logs', routing_key='', body='hello headers', properties=properties)
consumer.py
args = {
'x-match': 'all',
'user_type': 'vip',
'region': 'us'
}
channel.queue_bind(exchange='header_logs', queue=queue_name, arguments=args)
<h2><a id="1__1"></a>1 前言</h2>
<h3><a id="11__RabbitMQ_3"></a>1.1 什么是 RabbitMQ?</h3>
<p><strong>RabbitMQ</strong> 是一个开源的 <strong>消息中间件</strong>,基于 <strong>AMQP(Advanced Message Queuing Protocol)高级消息队列协议</strong> 开发,用于在分布式系统中传递消息、解耦模块、削峰填谷、实现异步处理。</p>
<blockquote>
<p>简单理解:RabbitMQ 就像一个快递中转站,负责接收消息、存储消息、转发消息。</p>
</blockquote>
<h3><a id="12__RabbitMQ__9"></a>1.2 RabbitMQ 有哪些特点?</h3>
<table>
<thead>
<tr>
<th>特点</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>📜 协议标准</td>
<td>基于 AMQP 协议,跨平台、跨语言</td>
</tr>
<tr>
<td>🔧 高可靠性</td>
<td>支持消息持久化、ACK确认机制、镜像队列(集群时)</td>
</tr>
<tr>
<td>📈 高可用性</td>
<td>支持集群、高可用队列,节点挂了也能继续处理</td>
</tr>
<tr>
<td>🔁 灵活路由</td>
<td>支持多种交换机类型(直连、广播、通配符、Header)</td>
</tr>
<tr>
<td>📦 插件系统丰富</td>
<td>支持 Web 管理界面、监控、集群管理、Shovel、Federation 等插件</td>
</tr>
<tr>
<td>🧩 支持多语言客户端</td>
<td>Python、Java、Go、Node.js 等都可以使用</td>
</tr>
</tbody>
</table>
<h3><a id="13__20"></a>1.3 核心概念</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Producer(生产者)</strong></td>
<td>消息的发送者</td>
</tr>
<tr>
<td><strong>Consumer(消费者)</strong></td>
<td>消息的接收者</td>
</tr>
<tr>
<td><strong>Queue(队列)</strong></td>
<td>存储消息的缓冲区,消息在这里等待被消费者消费</td>
</tr>
<tr>
<td><strong>Exchange(交换机)</strong></td>
<td>根据规则将消息分发到不同的队列,可设定分发策略</td>
</tr>
<tr>
<td><strong>Binding(绑定)</strong></td>
<td>把队列和交换机按照路由规则连接起来</td>
</tr>
<tr>
<td><strong>Routing Key</strong></td>
<td>路由关键字,用于消息在交换机和队列之间分发的依据</td>
</tr>
<tr>
<td><strong>Message(消息)</strong></td>
<td>实际传递的数据内容,一般是字符串、JSON 等</td>
</tr>
</tbody>
</table>
<h3><a id="14__32"></a>1.4 四种交换机类型对比]</h3>
<table>
<thead>
<tr>
<th>类型</th>
<th>路由规则</th>
<th>常见用途</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>fanout</code></td>
<td>广播到所有绑定队列</td>
<td>广播消息、日志系统</td>
</tr>
<tr>
<td><code>direct</code></td>
<td>精确匹配 routing_key</td>
<td>单个/指定消费者</td>
</tr>
<tr>
<td><code>topic</code></td>
<td>通配符匹配 routing_key</td>
<td>复杂路由,日志、事件</td>
</tr>
<tr>
<td><code>headers</code></td>
<td>根据消息 headers 条件匹配</td>
<td>header 控制精细路由</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>类型</th>
<th>说明</th>
<th>应用场景</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>direct</code></td>
<td>精确匹配 routing key</td>
<td>点对点消息</td>
</tr>
<tr>
<td><code>fanout</code></td>
<td>广播,忽略 routing key,发给绑定的所有队列</td>
<td>日志广播、消息通知</td>
</tr>
<tr>
<td><code>topic</code></td>
<td>模糊匹配,支持 <code>*</code> 和 <code>#</code> 通配符</td>
<td>订阅/发布模型,事件匹配</td>
</tr>
<tr>
<td><code>headers</code></td>
<td>按照 header 属性分发</td>
<td>高度定制的路由规则</td>
</tr>
</tbody>
</table>
<h3><a id="15__RabbitMQ__Kafka__48"></a>1.5 RabbitMQ 与 Kafka 对比</h3>
<table>
<thead>
<tr>
<th>对比项</th>
<th>RabbitMQ</th>
<th>Kafka</th>
</tr>
</thead>
<tbody>
<tr>
<td>设计理念</td>
<td>消息队列(面向消息)</td>
<td>日志系统(面向事件)</td>
</tr>
<tr>
<td>传输协议</td>
<td>AMQP</td>
<td>自定义协议(Kafka协议)</td>
</tr>
<tr>
<td>消息持久化</td>
<td>默认支持</td>
<td>高效磁盘持久化</td>
</tr>
<tr>
<td>消费模型</td>
<td>推(Push)模型</td>
<td>拉(Pull)模型</td>
</tr>
<tr>
<td>消息顺序</td>
<td>有序,但集群时需要配置保证顺序</td>
<td>分区内严格有序</td>
</tr>
<tr>
<td>吞吐量</td>
<td>中等偏高</td>
<td>超高吞吐量,适合大数据流</td>
</tr>
<tr>
<td>使用场景</td>
<td>实时消息通信、业务解耦、异步任务</td>
<td>日志采集、行为数据、数据管道</td>
</tr>
</tbody>
</table>
<h3><a id="16___60"></a>1.6 使用场景举例</h3>
<table>
<thead>
<tr>
<th>场景</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>🛍️ 电商下单后异步发短信</td>
<td>下单成功后,将“发送短信”任务放入消息队列,由异步服务处理</td>
</tr>
<tr>
<td>🧾 日志异步处理</td>
<td>应用不直接写数据库/文件,而是把日志写入 MQ,由后台服务统一处理</td>
</tr>
<tr>
<td>🎮 游戏事件分发</td>
<td>玩家行为被打包成事件,广播给多个服务(比如日志、成就、排行榜)</td>
</tr>
<tr>
<td>📧 邮件通知/延迟任务队列</td>
<td>延迟消费邮件、短信等任务,用 TTL + 死信队列实现</td>
</tr>
</tbody>
</table>
<h2><a id="2__71"></a>2 安装</h2>
<p>https://www.rabbitmq.com/docs/install-rpm</p>
<h3><a id="21_CentOS7__75"></a>2.1 CentOS7 安装</h3>
<h3><a id="22_docker_79"></a>2.2 docker安装</h3>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">latest RabbitMQ 4.0.x</span>
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4.0-management
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/4233b3972730ea2fbe02b99a91afde5c.png" alt="docker部署rabbitmq" /></p>
<h3><a id="23__88"></a>2.3 开启管理面板</h3>
<pre><div class="hljs"><code class="lang-shell">sudo rabbitmq-plugins enable rabbitmq_management
</code></div></pre>
<p>打开浏览器访问:<br />
http://127.0.0.1:15672<br />
默认账号:<code>guest</code>,密码:<code>guest</code></p>
<p><img src="https://static.couragesteak.com/article/eb2a4eae7ee9b5a2812586a495bf7b7c.png" alt="rabbitmq管理面板" /></p>
<h2><a id="3_python_100"></a>3 交换机类型(python案例)</h2>
<p>RabbitMQ 的四种交换机类型:<code>direct</code>、<code>topic</code>、<code>fanout</code>、<code>headers</code> 各有适用场景。</p>
<h3><a id="_104"></a></h3>
<h3><a id="31_fanout_106"></a>3.1 fanout(广播)</h3>
<p><strong>路由规则:</strong> 发送到所有绑定队列,<strong>不看 routing_key</strong></p>
<p>场景示例:</p>
<ul>
<li>日志系统,一条日志需要发送给多个子系统(存储、邮件、短信、实时通知等)</li>
</ul>
<p>结构图:</p>
<pre><code class="lang-"> Publisher
|
[Exchange: logs] -- fanout
/ \
[Queue1] [Queue2] <-- 多个消费者绑定
</code></pre>
<p><strong>publisher.py</strong></p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> pika
<span class="hljs-keyword">import</span> json
<span class="hljs-comment"># 建立连接</span>
mq_host = <span class="hljs-string">"192.168.56.20"</span>
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
connection = pika.BlockingConnection(pika.ConnectionParameters(mq_host))
channel = connection.channel()
<span class="hljs-comment"># 声明交换机</span>
channel.exchange_declare(exchange=<span class="hljs-string">'logs'</span>, exchange_type=<span class="hljs-string">'fanout'</span>)
<span class="hljs-comment"># 要发送的数据</span>
data = {
<span class="hljs-string">"event"</span>: <span class="hljs-string">"user_signup"</span>,
<span class="hljs-string">"username"</span>: <span class="hljs-string">"cs"</span>,
<span class="hljs-string">"nickname"</span>: <span class="hljs-string">"有勇气的牛排"</span>,
<span class="hljs-string">"timestamp"</span>: <span class="hljs-string">"2099-01-01 12:00:00"</span>
}
<span class="hljs-comment"># 将字典转换为 JSON 字符串</span>
message = json.dumps(data)
channel.basic_publish(exchange=<span class="hljs-string">'logs'</span>, routing_key=<span class="hljs-string">''</span>, body=message)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f"[x] Sent: <span class="hljs-subst">{message}</span>"</span>)
connection.close()
</code></div></pre>
<p><strong>consumer.py</strong></p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> pika
<span class="hljs-keyword">import</span> json
mq_host = <span class="hljs-string">"192.168.56.20"</span>
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
<span class="hljs-comment"># 建立连接</span>
connection = pika.BlockingConnection(pika.ConnectionParameters(mq_host))
channel = connection.channel()
<span class="hljs-comment"># 声明交换机</span>
channel.exchange_declare(
exchange=<span class="hljs-string">'test'</span>, <span class="hljs-comment"># 交换机名称</span>
exchange_type=<span class="hljs-string">'fanout'</span>, <span class="hljs-comment"># 交换机类型:fanout, direct, topic, headers</span>
passive=<span class="hljs-literal">False</span>, <span class="hljs-comment"># 检查是否存在,不创建(默认 False)</span>
durable=<span class="hljs-literal">False</span>, <span class="hljs-comment"># 是否持久化(重启 RabbitMQ 后是否还在)</span>
auto_delete=<span class="hljs-literal">False</span>, <span class="hljs-comment"># 无绑定队列时是否自动删除</span>
internal=<span class="hljs-literal">False</span>, <span class="hljs-comment"># 是否为内部交换机(客户端不能直接发布消息)</span>
<span class="hljs-comment"># arguments=None # 额外参数(高级设置,如消息过期时间等)</span>
)
<span class="hljs-comment"># 创建临时队列</span>
result = channel.queue_declare(queue=<span class="hljs-string">''</span>, exclusive=<span class="hljs-literal">True</span>)
queue_name = result.method.queue
<span class="hljs-comment"># 绑定队列</span>
channel.queue_bind(exchange=<span class="hljs-string">'logs'</span>, queue=queue_name)
<span class="hljs-built_in">print</span>(<span class="hljs-string">'[*] Waiting for messages. To exit press CTRL+C'</span>)
<span class="hljs-comment"># 回调函数</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">callback</span>(<span class="hljs-params">ch, method, properties, body</span>):
<span class="hljs-comment"># 将 JSON 字符串转换为字典</span>
data = json.loads(body.decode())
<span class="hljs-built_in">print</span>(<span class="hljs-string">f"收到消息:<span class="hljs-subst">{data}</span>"</span>)
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=<span class="hljs-literal">True</span>)
channel.start_consuming()
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/bfcdefaf2d133c084b8b9647a72573bd.png" alt="RabbitMQ fanout广播消息" /></p>
<h3><a id="32_direct_202"></a>3.2 direct(精准路由)</h3>
<p><strong>路由规则:</strong> 根据 routing_key 精确匹配队列绑定的 key。</p>
<p><strong>场景</strong>:系统中不同服务只接收自己关心的消息,如 <code>email</code> 只处理 email 消息,<code>sms</code> 处理短信。</p>
<p><strong>publisher.py</strong></p>
<pre><div class="hljs"><code class="lang-python">channel.exchange_declare(exchange=<span class="hljs-string">'direct_logs'</span>, exchange_type=<span class="hljs-string">'direct'</span>)
channel.basic_publish(exchange=<span class="hljs-string">'direct_logs'</span>, routing_key=<span class="hljs-string">'email'</span>, body=<span class="hljs-string">'邮件消息内容'</span>)
</code></div></pre>
<p><strong>consumer_email.py</strong></p>
<pre><div class="hljs"><code class="lang-python">channel.queue_bind(exchange=<span class="hljs-string">'direct_logs'</span>, queue=queue_name, routing_key=<span class="hljs-string">'email'</span>)
</code></div></pre>
<p><strong>consumer_sms.py</strong></p>
<pre><div class="hljs"><code class="lang-python">channel.queue_bind(exchange=<span class="hljs-string">'direct_logs'</span>, queue=queue_name, routing_key=<span class="hljs-string">'sms'</span>
</code></div></pre>
<h3><a id="33_topic_227"></a>3.3 topic(模糊/通配路由)</h3>
<p><strong>路由规则:</strong> 支持通配符匹配 routing_key:</p>
<ul>
<li><code>*</code>:匹配一个单词</li>
<li><code>#</code>:匹配零个或多个单词</li>
</ul>
<p>场景:日志系统:按模块/级别动态订阅,如</p>
<ul>
<li>log.error.app1</li>
<li>log.info.*</li>
<li><code>log.#</code>(全接)</li>
</ul>
<p><strong>publisher.py</strong></p>
<pre><div class="hljs"><code class="lang-python">channel.exchange_declare(exchange=<span class="hljs-string">'topic_logs'</span>, exchange_type=<span class="hljs-string">'topic'</span>)
channel.basic_publish(exchange=<span class="hljs-string">'topic_logs'</span>, routing_key=<span class="hljs-string">'log.error.app1'</span>, body=<span class="hljs-string">'Error log'</span>)
</code></div></pre>
<p><strong>consumer.py(接收所有 error)</strong></p>
<pre><div class="hljs"><code class="lang-python">channel.queue_bind(exchange=<span class="hljs-string">'topic_logs'</span>, queue=queue_name, routing_key=<span class="hljs-string">'log.error.*'</span>)
</code></div></pre>
<p><strong>consumer.py(接收所有日志)</strong></p>
<pre><div class="hljs"><code class="lang-python">channel.queue_bind(exchange=<span class="hljs-string">'topic_logs'</span>, queue=queue_name, routing_key=<span class="hljs-string">'log.#'</span>
</code></div></pre>
<h3><a id="34_headers_headers__259"></a>3.4 headers(基于 headers 路由)</h3>
<p><strong>路由规则:</strong> 不依赖 routing_key,而是根据消息 headers 中的键值匹配。</p>
<p><strong>场景</strong>:多条件筛选,如 “user_type=vip” 且 “region=us” 才接收消息。</p>
<p><strong>publisher.py</strong></p>
<pre><div class="hljs"><code class="lang-python">headers = {<span class="hljs-string">'user_type'</span>: <span class="hljs-string">'vip'</span>, <span class="hljs-string">'region'</span>: <span class="hljs-string">'us'</span>}
properties = pika.BasicProperties(headers=headers)
channel.exchange_declare(exchange=<span class="hljs-string">'header_logs'</span>, exchange_type=<span class="hljs-string">'headers'</span>)
channel.basic_publish(exchange=<span class="hljs-string">'header_logs'</span>, routing_key=<span class="hljs-string">''</span>, body=<span class="hljs-string">'hello headers'</span>, properties=properties)
</code></div></pre>
<p><strong>consumer.py</strong></p>
<pre><div class="hljs"><code class="lang-python">args = {
<span class="hljs-string">'x-match'</span>: <span class="hljs-string">'all'</span>, <span class="hljs-comment"># 'all' 代表必须全部匹配,'any' 代表任意一个</span>
<span class="hljs-string">'user_type'</span>: <span class="hljs-string">'vip'</span>,
<span class="hljs-string">'region'</span>: <span class="hljs-string">'us'</span>
}
channel.queue_bind(exchange=<span class="hljs-string">'header_logs'</span>, queue=queue_name, arguments=args)
</code></div></pre>
留言