一、概述
前一篇文章中,我们了解了交换机的四种类型,并使用了一个广播式发送消息的示例学习了fanout类型的交换机,这篇文章继续学习direct类型的交换机。direct类型的交换机可以实现不同的消息发送到不同的队列中去。
示例场景:在绑定同一个交换机的两个队列中,一个队列负责接收生产者发送的奇数消息,一个队列负责接收生产者发送的偶数消息,当发送的消息为10的整数倍时,两个队列均可收到消息。(目的是为了验证direct类型的交换机可以同时实现fanout功能)
实现方式:使用direct类型的交换机,分别定义绑定在交换机上的两个队列不同的routingKey,和一个相同的routingKey,发送消息指定routingKey,交换机根据指定的routingKey路由到指定的队列中。
二、源代码
整个工程的代码与上一篇的代码相似,只不过是改变了交换机的类型,同时一个消费者队列绑定了两个routingKey
先写生产者代码,相关描述都写在注释中,当是奇数时,发到绑定为odd的队列,是偶数时发到绑定为even的队列,是10的倍数时发送到绑定为all的队列。
1 | package com.cn.chenxyt.mq; |
再写消费者1代码,同样注释有说明,同时,随机队列绑定了odd和all两种routingKey
1 | package com.cn.chenxyt.mq; |
再写消费者2代码,与消费者1相同,随机队列绑定了even和all两种routingKey
1 | package com.cn.chenxyt.mq; |
然后分别启动消费者1和消费者2,使两个队列处于监听状态。
再启动生产者,可以看见RabbitMQ 控制台创建了一个名为“HelloMq”类型为direct的交换机,同时可以看见生产者发送数字,消费者1接收到奇数,消费者2接收到偶数,当数字为10的倍数时,消费者1和2都接收到消息。
至此,一个direct类型的交换机功能就实现了。工作中的应用场景可以系统中做日志处理,两个队列分别打印debug与error级别的日志,同时打印info级别的日志。