RabbitMQ的交换机类型有四种
1、direct 直流交换机:
根据消息的路由键routingkey,将消息以完全匹配的方式路由到指定的队列中。
这里的匹配指的是消息本身携带的路由键和队列与交换机绑定的绑定键进行对比,完全一致才算匹配上。
一个队列和一个交换机绑定时,可以设置多个绑定键。
一条消息可能会被路由到多个队列中,当多个队列设置相同的绑定键时会出现这种情况。比如,队列A、队列B与交换机之间进行绑定时,都设置了名为“binding_key_com”的绑定键,一条消息进入到交换机,消息携带的路由键是“binding_key_com”,那么这条消息既会被路由到队列A,也会被路由到队列B
2、topic 主题交换机:
和direct交换机非常类似,根据消息的路由键routingkey,将消息以模糊匹配的方式路由到指定的队列中。
3、fanout 扇形交换机:
不管消息的路由键是什么,它直接将发送到该交换机的消息路由到所有与它绑定的队列中。
4、headers 头部交换机:不常用
RabbitMQ工作模式:
1、简单模式:
一个生产者,一个队列,一个消费者。
2、work queue(工作队列):
一个生产者,一个队列,同一个队列里面的消息被多个消费者同时消费,每条消费只会被消费一次。
3、订阅模式:
生产者生产消息,消息经过扇形交换机或直连交换机发送到多个不同的队列,注意,这里多个队列接收的消息个数是一致的。每条消息都会被消费多次。
适用场景:对于生产者生产的每条消息,不同的系统需要对这条消息做不同的处理,
比如,商城里产生了一个订单,业务系统需要处理订单,日志系统需要记录订单日志。
4、路由模式:
上面的场景改进一下,比如,商城里产生了一个订单,有的订单是未付款,有的订单是已经付款的,而我的业务系统只需要处理已付款的订单,但是日志系统不管是未付款的还是已付款的,都需要记录日志。那么我们就需要根据订单的类型将消息分别路由到不同的队列中。
这里需要用到的交换机是直连交换机,并且要求每条消息必须携带路由键routingkey,比如“未付款”或者“已付款”。其中,我的日志队列和交换机必须要有多个绑定键,它既要绑定“未付款”,也要绑定“已付款”,而业务队列和交换机只需要绑定“已付款”即可。这样的话,“已付款”的消息不仅会被路由到日志队列,也会被路由到业务队列,而“未付款”的消息只会被路由到日志队列。
5、通配符模式:
是上面路由模式的改进型,允许消息的路由键包含通配符,由主题交换机进行与绑定键进行模糊匹配,将消息路由到所有符合要求的队列中。