RabbitMQ学习心得体会之Exchange
在工作队列中,一个消息只会投递一个消费者,但是发布订阅模式,同一个消息可以发送个多个消费者。
(交换)Exchanges
rabbitMQ的核心是把生产者把消息发送给exchange,这个x一边是从p接收消息,一边是把这些消息推送给队列。生产者是不会发消息给队列的,都是靠这个x,所以为了让x知道这个我该怎么处理p发过来的消息,就要指定exchange的类型。它的类型有五种:direct,topic,headers和fanout。
一、Fanout类型:广播所有消息给它所知道的队列。
如果exchange传空字符串,就会使用默认的无命名交换,那就会根据routingKey值投送给对应的消费者。
在exchange和队列之间建立联系,依靠的是binding,消费者bindingexchange的key值就建立了联系。
二、Direct类型:它的作用是在广播的基础上,过滤出特定的消息,fanout类型会忽略binding-key,但是direct会命名一个binding key,参数同样是传给routing-key,那么定义了相同类型的binding key,都会就收到同样的消息,也就是重复的,这也算是一种限定类型的广播方式。
三、Topics类型:它是在Direct上的bind key上做了一些改动,让消费者更灵活的处理消息,direct类型的binding key都是一个单词,而topics是用.隔开的多个单词,比如:stock.usd.nyse,还可以加上#、*符号的binding key。
#替代0个或多个单词,
*替代一个单词。
举例:*.orange.*,这个匹配三个单词的key,并且中间的key一定要是orange,比如odd.orange.odd的消费者就会被投递。lazy.#,这个匹配lazy开头,后面任意个单词的key值,比如lazy、lazy.doing、lazy.dd.oo的消费者都会收到消息。
四:headers类型:它是根据返回的reqeuest的消息头来确定的,比如200 ok、500 error 等。