RabbitMq学习笔记(五)—— Topic

ReceiveTopicOne 匹配规则1

//声明交换器和队列

channel.exchangeDeclare(EXCHANGE_NAME, "topic");

String queueName = channel.queueDeclare().getQueue();

//路由关键字规则

String[] routingKeys = new String[]{"*.*.rabbit", "lazy.#"}; 

//绑定路由关键字

for (String bindingKey : routingKeys) {  

      channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);  

 }  



ReceiveTopicTwo 匹配规则2

//声明交换器和队列

channel.exchangeDeclare(EXCHANGE_NAME, "topic");

String queueName = channel.queueDeclare().getQueue();

//路由关键字规则

String[] routingKeys = new String[]{"*.orange.*"};  

//绑定路由关键字

for (String bindingKey : routingKeys) {  

     channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);  

}  



TopicSend 发送

channel.exchangeDeclare(EXCHANGE_NAME, "topic");  

//待发送信息

String[] routingKeys = new String[]{"quick.orange.rabbit",

                                                            "lazy.orange.elephant",   

                                                            "quick.orange.fox",   

                                                            "lazy.brown.fox",   

                                                            "quick.brown.fox",   

                                                            "quick.orange.male.rabbit",   

                                                            "lazy.orange.male.rabbit"};  

for (String bindingKey : routingKeys) {  

     channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);  

}  

用三个关键字来绑定,Q1绑定关键字是【.orange.】,Q2绑定关键字是【..rabbit】和【lazy.#】,然后分析会发生什么:

这里写图片描述

Q1会收到所有orange这种颜色相关的消息

Q2会收到所有rabbit这个动物相关的消息和所有速度lazy的动物的消息

分析:

生产者发送“quick.orange.rabbit”的消息,两个队列都会收到

生产者发送“lazy.orange.elephant”,两队列也都会收到。

生产者发送”quick.orange.fox”,那么只有Q1会收到。

生产者发送”lazy.brown.fox”,那么只会有Q2能收到。

生产者发送”quick.brown.fox”,那么这条消息会被丢弃,谁也收不到。

生产者发送”quick.orange.male.rabbit”,这个消息也会被丢弃,谁也收不到。

生产者发送”lazy.orange.male.rabbit”,这个消息会被Q2的【lazy.#】规则匹配上,发送到Q2队列中。

注意

交换器在匹配模式下:

如果消费者端的路由关键字只使用【#】来匹配消息,在匹配【topic】模式下,它会变成一个分发【fanout】模式,接收所有消息。

如果消费者端的路由关键字中没有【#】或者【*】,它就变成直连【direct】模式来工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值