队列(queue)是RabbitMQ的内部对象,用于存储消息。 生产者(proverder ),生产消息并投递到队列中。 消费者(consumer)可以从队列中获取消息并消费。如果有多个消费者,队列中的消息会平均分摊给各个消费者,而不是每个消费者能获取所有的队列消息并处理。
实际情况,一般是生产者绑定Exchange(交换机),通过指定一个Binding key,将Exchange与Queue绑定关联起来。 于是,生产者可以通过Routing key指定具体的路由规则,决定消息流向那个Queue中。Bindingkey与Rounting key一致才能取出该队列。
RabbitMQ常用的Exchange Type有四种:fanout、direct、topic、headers 。
direct:(默认方式)创建消息队列的时候,指定一个BindingKey。当发送者发送消息的时候,指定对应的Key。当Key和消息队列的BindingKey一致的时候,消息将会被发送到该消息队列中。先匹配,在投送。
topic:转发信息主要是依据通配符(.
和*
),队列和交换机的绑定主要是依据一种模式(通配符+字符串),而当发送消息的时候,只有指定的Key和该模式相匹配的时候,消息才会被发送到该消息队列中。最为灵活的方式。
headers:队列和交换机的绑定的通过指定的一组键值对,而发送消息的时候也会指定一组键值对规则,当两组键值对规则相匹配的时候,消息会被发送到匹配的消息队列中。
fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中,设置的任何Key此时都无效。消息广播方式。
“quick.orange.rabbit”指定了两个队列 *.orange和 *.rabbit
简而言之,分为6种, 一对一生产消费模式,一对多生产消费模式、订阅发布模式、路由模式、主题模式、远程调用模式。
参考