RabbitMQ各种交换机机制,代码实践篇

点击上方“Java后端技术之路”,选择“置顶或者星标”

与你一起成长

93d7172637f093d0d5905e57c3680f77.jpeg本文主要是实践建议大家下载下来代码走一遍,代码地址在文末。

问题:

首先带着下面几个问题来展开讨论:

1、有哪几种交换器(channel)。

2、direct交换器一个队列绑定多个交换器会什么样子。

3、direct交换器一个连接多个信道会什么样子。

4、direct交换器多个消费者消费一个队列会如何。

5、direct交换器多个队列绑定一个信道会如何。

6、topic交换器如何订阅,*与#什么区别。

7、Fanout交换器什么机制。

下面我们根据代码实践来讨论上面几个问题。

客户端与RabbitMQ通讯

1、引入jar

ac0acbb4eb37499f8400abea9e0e41f3.png

2、建立连接

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

6445e8230106d1de3651434a81abed4f.png

3、创建信道channel

生产者消费上面1、2步骤代码都一样,只有3步骤会有部分差异,具体如下:

生产者:创建信道 》 绑定交换路由 》 绑定队列(非必须生产者消费者两遍谁做都可以) 》 发布消息

b6a809e8c00bd431341006ee4f158e4a.png

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

 0acc05676a6eda0584963230c35fbec5.png

针对疑问做解答

疑问1:有哪几种交换机

共有四种 direct,fanout,topic,headers,其中 headers(几乎和 direct 一样)不实用,可以忽略。

具体可以参见上篇文章:MQ第一节

疑问2:direct交换器一个队列绑定多个交换器会什么样子。

一个队列绑定多个交换器,会收到每个交换器的消息。

代码演示如下:

生产者:

aa3688061ad0b0b005c8368bf6845861.png

消费者:

522eabd18e2fdd5227c10514fa8fbe62.png

运行结果:

5dbec16d1c6092550cd5ed8a898e1f74.png

 1fbbd7261be15091209819597d69b715.png

从实例中明显发现收到了每个路由的消息。

疑问3:direct交换器一个连接多个信道会什么样子

一个连接多个信道每个连接都会收到消息。

疑问4:direct交换器多个消费者消费一个队列会如何。

多个消费者消费一个队列会轮询消费。也就是多个消费者消费的数据加起来等于一个队列里面的数据

 9b0d994c4f0a582264b8d3e3a52a5bb3.png

疑问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)

d5aed3a0971e4ab9fc39fb5c9c72d90f.jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值