Spring Boot实践记录个人技术栈后端相关

Topic和Direct、Fanout匹配解析

2017-08-16  本文已影响42人  Chinesszz

RabbitMQ详解

MQ常用概念

快速入门使用

目录

交换机(Exchange)

1. Direct Exchange

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

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

Q2 就有 2 个 binding key,名字为blackgreen

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

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);  

2.Topic Exchange

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

在这种交换机模式下:

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

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

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


3.Fanout Exchange

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

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

给消息设置属性值


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

上一篇 下一篇

猜你喜欢

热点阅读