Exchange服务器之Topic和Direct、Fanout匹配解析
白羽 2018-07-26 来源 :网络 阅读 1826 评论 0

摘要:本文将带你了解Exchange服务器之Topic和Direct、Fanout匹配解析,希望本文对大家学Exchange有所帮助

RabbitMQ详解



MQ常用概念



快速入门使用


推荐查看 <

目录


交换机(Exchange) 
1.Direct Exchange  根据route key 直接找到队列
2.Topic Exchange   根据route key 匹配队列
3.Topic Exchange   不处理route key 全网发送,所有绑定的队列都发送 




交换机(Exchange)

1. Direct Exchange

Direct Exchange是RabbitMQ默认的交换机模式,也是最简单的模式,根据key全文匹配去寻找队列。



Q1 绑定了一个 binding key 名字为 orange; 

Q2 就有 2 个 binding key,名字为black和 green。

当消息中的 路由键 和 这个 binding key 对应上的时候,那么就知道了该消息去到哪一个队列中。


代码演示 A

  @Bean
  public Queue helloQueue() {
      return new Queue("retry_payment");
  }
  @Bean
  DirectExchange exchange() {
      return new DirectExchange("retry_payment");
  }
  //绑定一个key,当消息匹配到就会放到这个队列中
  @Bean
  Binding bindingExchangeMessage(Queue queueMessage, DirectExchange exchange) {
      return BindingBuilder.bind(queueMessage).to(exchange).with("retry_payment");
  }12345678910111213

//向指定routingKey中推送,推送到指定队列
rabbitTemplate.convertAndSend(exchange:"retry_payment", routingKey:"retry_payment", message:message);12
代码演示 B




Channel channel = connection.createChannel();  
channel.exchangeDeclare("retry_payment", "direct");  //声明一个交换机,direct 可以换位topic或者是fannout
channel.queueDeclare("retry_payment");  //声明一个队列
channel.queueBind("queueName", "exchangeName", "routingKey");  //绑定路由键





//需要绑定路由键,发送消息
byte[] messageBodyBytes = "hello world".getBytes(); 
channel.basicPublish("exchangeName", "routingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);  123456789101112



2.Topic Exchange



Topic Exchange 转发消息主要是根据通配符。 在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息。

在这种交换机模式下:


路由键必须是一串字符,用句号(.) 隔开,比如说 agreements.us,或者 agreements.eu.stockholm 等。
路由模式必须包含一个 星号(*),主要用于匹配路由键指定位置的一个单词,比如说,一个路由模式是这样子:agreements..b.*,那么就只能匹配路由键是这样子的:第一个单词是 agreements,第四个单词是 b。 井号(#)就表示相当于一个或者多个单词,例如一个匹配模式是agreements.eu.berlin.#,那么,以agreements.eu.berlin开头的路由键都是可以的。


具体代码发送的时候还是一样,第一个参数表示交换机,第二个参数表示routing key,第三个参数即消息。如下:



rabbitTemplate.convertAndSend("testTopicExchange","key1.a.c.key2", " this is  RabbitMQ!");1

topic 和 direct 类似, 只是匹配上支持了”模式”, 在”点分”的 routing_key 形式中, 可以使用两个通配符:


*表示一个词.
#表示零个或多个词.




3.Fanout Exchange



不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。 

发送消息,只需要指定交换机,route key 可以为空



给消息设置属性值




设置请求头或者编码
  MessageProperties messageProperties= message.getMessageProperties();
  

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标系统运维之Exchange频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved