对 rabbitmq 基本理解(exchange queue binding-key routing-key)

一  exchange queue binding-key routing-key概念及相互间的关系

1.queue :存储消息的队列,可以指定name来唯一确定

2.exchange:交换机(常用有三种),用于接收生产者发来的消息,并通过binding-key 与 routing-key 的匹配关系来决定将消息分发到指定queue

 2.1 Direct(路由模式):完全匹配 > 当消息的routing-key 与 exchange和queue间的binding-key完全匹配时,将消息分发到该queue

 2.2 Fanout (订阅模式):与binding-key和routing-key无关,将接受到的消息分发给有绑定关系的所有队列(不论binding-key和routing-key是什么)

 2.3 Topic (通配符模式):用消息的routing-key 与 exchange和queue间的binding-key 进行模式匹配,当满足规则时,分发到满足规则的所有队列

二 exchange queue binding-key routing-key的创建与使用

1. Fanout

ConnectionFactory connectionFactory = new ConnectionFactory();
// 获取到tcp连接
Connection connection = connectionFactory.newConnection();
 //从tcp连接中创建通道
 Channel channel = connection.createChannel();

/ 声明exchange
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
// 声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
channel.queueDeclare(QUEUE_NAME2, false, false, false, null);
// 绑定队列到交换机
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
// 绑定队列到交换机 - aaa 是路由键3名称(其实这里无作用)
channel.queueBind(QUEUE_NAME2, EXCHANGE_NAME, "aaa");

这样就创建好队列和交换机并且将它们绑定好了,只要交换机EXCHANGE_NAME收到消息就会分发给队列1和2

// 消息内容
String message = "qqqqqqqq";
channel.basicPublish(EXCHANGE_NAME, "aaa", null, message.getBytes()); // 这里路由键aaa有没有都一样,可以写任何值

2.不显式声明交换机时并且发送消息不指定交换机,则默认使用Direct,并且声明队列时,不显式绑定队列与交换机,则队列以队列名为routing-key绑定到默认的direct交换机,发送消息不指定交换机时,则将消息发到默认的direct交换机

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值