Direct交换机是RabbitMQ中一种常用的交换机类型。它根据消息的路由键(Routing Key)将消息发送到与之匹配的队列。每个Direct交换机都会绑定一个或多个队列,并根据消息的路由键选择性地将消息发送给匹配的队列。
Direct交换机的基本概念
Direct交换机的工作方式是根据消息的路由键将消息发送给与之匹配的队列。每个绑定到Direct交换机的队列都会指定一个绑定键(Binding Key),当消息的路由键与队列的绑定键相匹配时,消息将被发送到该队列。
Direct交换机的关键特点如下:
- 路由键匹配:Direct交换机根据消息的路由键与队列的绑定键进行匹配,只将消息发送给匹配的队列。
- 单播模式:Direct交换机将消息发送给与之匹配的单个队列,而不是广播给所有队列。
- 队列绑定:队列需要将自己绑定到Direct交换机上,并指定绑定键,以接收与之匹配的消息。
使用Java代码创建Direct交换机、绑定队列并发送消息的示例:
代码语言:javascript复制import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
public class DirectExchangeExample {
private static final String EXCHANGE_NAME = "direct_exchange";
private static final String ROUTING_KEY = "example.key";
public static void main(String[] args) throws IOException, TimeoutException {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建连接
Connection connection = factory.newConnection();
// 创建信道
Channel channel = connection.createChannel();
// 声明Direct交换机
channel.exchangeDeclare(EXCHANGE_NAME, "direct");
// 声明队列
String queueName = channel.queueDeclare().getQueue();
// 绑定队列到交换机
channel.queueBind(queueName, EXCHANGE_NAME, ROUTING_KEY);
// 发送消息
String message = "Hello, RabbitMQ!";
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes(StandardCharsets.UTF_8));
System.out.println("Sent message: " message);
// 关闭信道和连接
channel.close();
connection.close();
}
}
在这个示例中,我们首先创建了一个名为"direct_exchange"的Direct交换机。然后,我们创建了一个队列并将其绑定到Direct交换机上,绑定键为"example.key"。这意味着只有带有路由键为"example.key"的消息才会被发送到该队列。
最后,我们使用channel.basicPublish
方法发送一条带有路由键"example.key"的消息到Direct交换机。该消息将被匹配到绑定键为"example.key"的队列。