全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-22 8 分钟 ✍️ juanwangdev

绑定 Binding

绑定是交换机与队列之间的连接规则,定义了哪些消息可以从交换机路由到指定队列。

基本概念

绑定建立了消息流转路径:

XML
Exchange ──[Binding Key]──> Queue
  • 交换机不知道队列的存在,通过绑定规则决定消息去向
  • Binding Key是绑定的匹配条件,与消息的Routing Key配合决定路由结果
  • 一个交换机可绑定多个队列,一个队列也可被多个交换机绑定

Java Client 示例

Maven依赖:

Java
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.18.0</version>
</dependency>

建立绑定关系:

Java
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.BuiltinExchangeType;

public class BindingExample {
    private static final String EXCHANGE_NAME = "order_exchange";
    private static final String QUEUE_NAME = "order_queue";
    private static final String BINDING_KEY = "order.create";

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");

        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {

            // 1. 声明交换机
            channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);

            // 2. 声明队列
            channel.queueDeclare(QUEUE_NAME, true, false, false, null);

            // 3. 建立绑定关系
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY);

            System.out.println("绑定已建立: " + QUEUE_NAME + " <-> " + EXCHANGE_NAME);
        }
    }
}

解除绑定:

Java
// 移除交换机与队列的绑定关系
channel.queueUnbind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY);
System.out.println("绑定已解除");

查看绑定列表:

text
import com.rabbitmq.client.AMQP;
import java.util.Map;

// 通过管理HTTP API查看绑定(非Java Client原生支持)
// 命令行方式:rabbitmqctl list_bindings

Java Client原生不提供绑定查询API,需使用 rabbitmqctl list_bindings 或管理插件HTTP接口。

绑定匹配规则

不同交换机类型的绑定行为:

交换机类型Binding Key作用匹配条件
Direct精确匹配Routing Key == Binding Key
Fanout忽略所有消息转发到所有绑定队列
Topic模式匹配Routing Key 符合 Binding Key 的通配符模式

注意事项

  1. 绑定前必须先声明交换机和队列,否则绑定操作会失败
  2. 同一交换机与队列间重复建立相同Binding Key的绑定不会产生错误,但也不会重复生效
  3. Fanout交换机的Binding Key会被忽略,所有绑定队列都会收到消息
  4. 解除绑定使用 queueUnbind(),参数与 queueBind() 完全一致

要点总结

  • 绑定是交换机与队列间的路由规则,通过Binding Key定义消息转发条件
  • 使用 channel.queueBind(queue, exchange, bindingKey) 建立绑定关系
  • Direct交换机要求Binding Key与Routing Key完全匹配,Topic交换机支持通配符
  • 绑定操作前需确保交换机和队列已存在,否则操作失败

文章存放路径:D:\git2\jwdev\articles\RABBITMQ\入门\核心概念入门\绑定 Binding.md

📝 发现内容有误?点击此处直接编辑

← 上一篇 交换机 Exchange
下一篇 → 虚拟主机 VHost
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库