简单理解交换机在RabbitMQ中扮演的角色
交换机在RabbitMQ中扮演消息系统中枢,将从生产者处收集的消息转发至对应的消息队列处,等待消费者消费
提前说明交换机 与 routing key 与 消息队列的关系
channel.queueBind(queueName, exchangeName, routingKey);
消息队列被绑定至交换机,交换机根据routing key标识并分类消息队列
交换机的种类及对应模式
1.fanout
Publish/Subscribe(发布与订阅)模式交换机
生产者向交换机中传递消息后,所有队列均会收到消息
2.direct
Routing(路由)模式交换机,该交换机为RabbitMQ的默认交换机
生产者向交换机传递消息后,交换机在进行消息分发的时候,只会将该消息分发至被对应routing key标识的队列
举例:五个队列的routing key分别为key1 key2 key3 key3 key3,那么生产者指定的routing key为key3时,队列3 4 5将收到消息,而队列1 2不会
3.topic
Topics(主题)模式交换机,相较前者添加了基于routing key的模糊匹配
举例:队列1 2 3的routing key分别为 111.number.xxx 与 222.number.xxx.yyy 与 333.333.number.
那么:
*.number.# 将匹配队列1 2
#.number.* 将匹配队列1
*.number.* 将匹配队列1
#.number.# 将匹配队列1 2 3
4.headers
参数交换机
声明队列时,可设置队列携带参数
channel.queueDeclare(queueName, durable, exclusive, autoDelete, arguments);
生产者传递消息时,可设置消息携带参数,参数交换机会将该消息分发至具有相同参数的队列
channel.basicPublish(exchangeName, routingKey, prop, message.getBytes());