RabbitMQ重要概念
Producer (生产者
Consumer (消费者) :
Broker
RabbitMQ 服务节点(单机情况中,就是代表RabbitMQ服务器)
Queue (队列) :
Binding (绑定) :
RabbitMQ中绑定(Binding)是交换机(exchange)将消息(message)路由给队列(queue)所需遵循的规则。如果要指示交换机“E”将消息路由给队列“Q”,那么“Q”就需要与“E”进行绑定。绑定操作需要定义一个可选的路由键(routing key)属性给某些类型的交换机。路由键的意义在于从发送给交换机的众多消息中选择出某些消息,将其路由给绑定的队列。
_
Exchange (交换机)
生产者将消息发送给交换器(交换机),再由交换器将消息路由导对应的队列中
交换机四种类型 : fanout,direct,topic,headers
fanout (扇形交换机) :
将发送到该类型交换机的消息(message)路由到所有的与该交换机绑定的队列中,如同一个”扇”状扩散给各个队列
fanout类型的交换机会忽略RoutingKey的存在,将message直接”广播”到绑定的所有队列中
direct (直连交换机) :
根据消息携带的路由键(RoutingKey) 将消息投递到对应的队列中
direct类型的交换机(exchange)是RabbitMQ Broker的默认类型,它有一个特别的属性对一些简单的应用来说是非常有用的,在使用这个类型的Exchange时,可以不必指定routing key的名字,在此类型下创建的Queue有一个默认的routing key,这个routing key一般同Queue同名.
Topic (主题交换机) :
topic类型交换机在RoutingKey 和 BindKey 匹配规则上更加的灵活. 同样是将消息路由到RoutingKey和 BindingKey 相匹配的队列中,但是匹配规则有如下的特点 :
规则1: RoutingKey 是一个使用点号. 的字符串 例如: “go.log.info” , “java.log.error”
规则2: BingingKey 也会一个使用点号 . 分割的字符串, 但是在 BindingKey 中可以使用两种特殊字符 和 # ,其中 ““ 用于匹配一个单词,”#”用于匹配多规格单词(零个或者多个单词)
RoutingKey和BindingKey 是一种”模糊匹配” ,那么一个消息Message可能 会被发送到一个或者多个队列中
无法匹配的消息将会被丢弃或者返回者生产者
Headers (头交换机):
头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。在绑定队列和交换器时制定一组键值对,当发送消息到交换器时,RabbitMQ 会获取到该消息的 headers (也是一个键值对的形式〉 ,对比其中的键值对是否完全 匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由 到该队列 。 headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。
RoutingKey
RoutingKey (路由键) : 消息投递给交换器,通常会指定一个 RoutingKey ,通过这个路由键来明确消息的路由规则
RoutingKey 通常是生产者和消费者有协商一致的key策略,消费者就可以合法从生产者手中获取数据。这个RoutingKey主要当Exchange交换机模式为设定为direct和topic模式的时候使用,fanout模式不使用RoutingKey