点击上方“Java后端技术之路”,选择“置顶或者星标”
与你一起成长
本文主要是实践建议大家下载下来代码走一遍,代码地址在文末。
问题:
首先带着下面几个问题来展开讨论:
1、有哪几种交换器(channel)。
2、direct交换器一个队列绑定多个交换器会什么样子。
3、direct交换器一个连接多个信道会什么样子。
4、direct交换器多个消费者消费一个队列会如何。
5、direct交换器多个队列绑定一个信道会如何。
6、topic交换器如何订阅,*与#什么区别。
7、Fanout交换器什么机制。
下面我们根据代码实践来讨论上面几个问题。
客户端与RabbitMQ通讯
1、引入jar

2、建立连接
创建连接工厂 》 设置地址 》 设置端口号 》 需要登录的设置密码 》 新建连接

3、创建信道channel
生产者消费上面1、2步骤代码都一样,只有3步骤会有部分差异,具体如下:
生产者:创建信道 》 绑定交换路由 》 绑定队列(非必须生产者消费者两遍谁做都可以) 》 发布消息

消费者:创建信道 》 在信道中绑定交换器 》 设置队列 》 绑定路由 》 声明一个消费者 》 正式指定队列消费

针对疑问做解答
疑问1:有哪几种交换机
共有四种 direct,fanout,topic,headers,其中 headers(几乎和 direct 一样)不实用,可以忽略。
具体可以参见上篇文章:MQ第一节
疑问2:direct交换器一个队列绑定多个交换器会什么样子。
一个队列绑定多个交换器,会收到每个交换器的消息。
代码演示如下:
生产者:

消费者:

运行结果:


从实例中明显发现收到了每个路由的消息。
疑问3:direct交换器一个连接多个信道会什么样子
一个连接多个信道每个连接都会收到消息。
疑问4:direct交换器多个消费者消费一个队列会如何。
多个消费者消费一个队列会轮询消费。也就是多个消费者消费的数据加起来等于一个队列里面的数据

疑问5:direct交换器多个队列绑定一个信道会如何。
每个队列都会收到信道的所有消息
疑问6:topic交换器如何订阅,*与#什么区别。
*匹配一个,#匹配多个
疑问7:Fanout交换器什么机制。
广播机制,队列绑定一个信道会收到所有消息,和绑定全部信道是一样的。
代码地址
建议大家down下来代码跑一边理解一下。
https://github.com/SunSmileAZY/mq-study
往期推荐:
消息中间件(MQ)与AMQP
MQ消息队列常见面试题详解
面试精选
MQ消息队列常见面试题详解
Redis常见面试题详解
备战2020,十四道Mybatis常见面试题!!!
十二道Spring常见面试题
Spring 常见面试题一,助你2020 ,come on
微服务面试题 - Spring Cloud
备战2020面试题,Java面试题下(锁、AQS、线程池)
备战2020,Java基础面试题上(String、各种集合、hashMap)
