rabbitmq学习——routingkey

public class Send {

public static final String exchange = "direct_log_son";

public static void main(String[] args) throws Exception{
Connection conn = ChanncelFactory.getChanncelFactory();
Channel channel = conn.createChannel();
//这里采用了直连 之前的扇形 是对所有接收者进行发送
channel.exchangeDeclare(exchange, "direct");

String body = "获取子集";

//这里与之前的增加了 routingkey 获取的时候 可以根据这个进行区分
channel.basicPublish(exchange, "abcde", null, body.getBytes());

ChanncelFactory.close(channel, conn);
}
}

 

public class Receive {
public static void main(String[] args) throws Exception{
Connection conn = ChanncelFactory.getChanncelFactory();
Channel channel = conn.createChannel();
channel.exchangeDeclare(Send.exchange, "direct");

String queuename = channel.queueDeclare().getQueue();
//这里的abcde 也可是 defg 就是获取的不同而已
channel.queueBind(queuename, Send.exchange, "abcde");
System.out.println(queuename);
Consumer callback = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
BasicProperties properties, byte[] body) throws IOException {
System.out.println("内容: "+new String(body, "utf-8"));
}
};
for(int i=1; i<6; i++){
Thread.sleep(2000);
channel.basicConsume(queuename, true, callback);
}

ChanncelFactory.close(channel, conn);
}
}

转载于:https://www.cnblogs.com/core404/p/7645264.html

### RabbitMQ 交换机与队列通过路由键绑定 在 RabbitMQ 中,可以通过定义特定的路由键 (routing key),将消息从生产者发送至指定的队列。此过程涉及三个主要组件:交换机(Exchange)、队列(Queue) 和路由键(Routing Key)[^2]。 #### 定义交换机和队列 为了实现这一功能,首先需要声明一个交换机以及至少一个队列。这里以 `Direct` 类型的交换机为例: ```java // 声明交换机 String exchangeName = "task_exchange"; channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT); // 创建队列 String queueName = "task_queue"; channel.queueDeclare(queueName, false, false, false, null); ``` 上述代码片段展示了如何使用 Java API 来创建名为 `task_exchange` 的 Direct 类型交换机,并创建了一个名为 `task_queue` 的队列[^3]。 #### 设置绑定关系 接下来设置交换机与队列之间的绑定关系,并指定期望使用的路由键 (`task.new`): ```java // 将队列绑定到交换机上,并指定路由键 String routingKey = "task.new"; channel.queueBind(queueName, exchangeName, routingKey); ``` 这段代码实现了将之前创建好的 `task_queue` 绑定到了 `task_exchange` 上,并设置了匹配条件为 `task.new` 的路由键。这意味着只有当消息被发布给该交换机且其携带的路由键正好等于 `"task.new"` 时,才会被转发到这个队列中去处理。 #### 发布测试消息 最后可以尝试向交换机发送一条带有相应路由键的消息来进行验证: ```java // 准备要发布的消息体 String messageBody = "This is a test message."; // 使用 BasicPublish 方法发布消息 channel.basicPublish(exchangeName, routingKey, null, messageBody.getBytes()); ``` 此时,如果一切正常的话,这条消息应该会被成功投递给已经绑定了相同路由键的那个队列——即这里的 `task_queue`,等待相应的消费者程序对其进行消费操作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值