RabbitMq学习笔记(五)—— Topic

来源:互联网 发布:淘宝如何打印发货单 编辑:程序博客网 时间:2024/06/03 21:31
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】模式来工作。

0 0
原创粉丝点击