绑定 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 的通配符模式 |
注意事项
- 绑定前必须先声明交换机和队列,否则绑定操作会失败
- 同一交换机与队列间重复建立相同Binding Key的绑定不会产生错误,但也不会重复生效
- Fanout交换机的Binding Key会被忽略,所有绑定队列都会收到消息
- 解除绑定使用
queueUnbind(),参数与queueBind()完全一致
要点总结
- 绑定是交换机与队列间的路由规则,通过Binding Key定义消息转发条件
- 使用
channel.queueBind(queue, exchange, bindingKey)建立绑定关系 - Direct交换机要求Binding Key与Routing Key完全匹配,Topic交换机支持通配符
- 绑定操作前需确保交换机和队列已存在,否则操作失败
文章存放路径:D:\git2\jwdev\articles\RABBITMQ\入门\核心概念入门\绑定 Binding.md
📝 发现内容有误?点击此处直接编辑