上一节说了这么多废话, 看也看烦了, 现在我们就来用鼠标点点点, 来简单玩一下这个 RabbitMQ.
注意: 这一节还是不用敲什么代码, 因为上一节我们设置了那个可视化工具, 我们先用用可视化工具熟悉一下流程.
打开可视化页面, http://localhost:15672
顺便说一下 RabbitMQ 中的持持久化: 这里持久化分为三种: 消息持久化, 交换器持久化, 队列持久化...
举个例子, 就简单说说交换器持久化, 其实就是为了防止将消息发到交换器了, 但是 RabbitMQ 服务器突然暴毙, 没用了, 那数据不就丧失了么? 于是弄个持久化出来, 可以将传给交换器的数据存到硬盘里, 即使 RabbitMQ 服务器没用了, 但是数据还在硬盘里啊, 我们只需要维修好服务器就正常使用了. 其他两个持久化也类似, 自己查查
首先, 我们来创建三个交换器 (direct,fanout,topic), 每种类型来一个;
添加好了三个在这里
然后我们添加几个队列, 跟上面基本一样.
不过要注意一点: 因为默认是将 Queue 的名字作为 BindingKey, 所以取名字的时候, 用英语的句号分隔成多个单词, 类似 ""hello.123","ddd.abc.aaa", 而且后面的模糊匹配也是根据这些单词进行匹配的.
我新建四个队列, animal animal.dog animal.cat black.dog
我新建的四个队列:
下一步是干什么呢? 肯定是将这些交换器和 Queue 绑定起来啊! 下面图中的这个 RoutingKey 就是指的是 BindingKey, 希望能够知道, 是为了方便理解, 所以很多版本都叫做 BindingKey, 不然都叫做 RoutingKey 的话, 初学者肯定一脸蒙逼, what? 到底是哪个 RoutingKey? 有什么区别啊?
绑定 direct 交换器
绑定四次, 这个交换器就绑定完成, 再换下一个交换器 (记住, topic 这个可以模糊匹配的交换器绑定的时候有点特殊)
topic 交换器绑定
由于可以支持模糊匹配, 那么这个 BindingKey 可以是通配符 #和 *, 其中 #代表多个单词, 可以表示零个,* 代表一个单词.
举个例子, topic 交换器和其中一个 Queue 绑定的 BindingKey 为 "hello.#", 消息的 RoutingKey 为 "hello.world", 那么这个消息就会传给这个 Queue 一份.
ok, 继续绑定
fanout 交换器绑定
其实这个交换器绑定 BindingKey 没啥用, 因为这个用的是广播模式, 只要是和这个交换器绑定的 Queue, 都会发一份消息给它
测试:
1. 我们先给 direct 交换器发消息
进入 direct 交换器
然后切换到队列, 发现有数据到了, 就在 animal 队列中
2. 给 fanout 交换器发消息
查看消息, 随意点开一个队列, 你也可以试试其他的
3. 给 topic 交换器发消息
下面来手动测试一下消费者从队列中取消息.
这里又要提一下一个东西: 假如一个消费者从队列中刚刚取到数据, 啪一下, 消费者那边停电了或者退出了! 而 RabbitMQ 中的 Queue 管你这么多啊, 都看到从我这里拿数据了, 于是就删除了队列中的数据, 这样数据就造成丢失了!
于是一些大牛就设计啊, 当消费者从队列中取到数据之后, Queue 先不要删除数据, 必须等消费者那边处理完这条数据然后回复 Queue:"ok, 我处理完了, 你可以删除数据了!", 然后 Queue 就删除这条数据.
我们手动来测试这个过程:
点开那个 animal 队列,
然后你再获取数据, 获取一条, 队列就删除一条, 最后队列显示 0 条
这一节就用可视化工具手动的粗略测试了一下 RabbitMQ 的全过程, 想必大家应该有了一个初步的认识, 比上一节看了那么多废话应该好了不少.
当然, 我们在 springboot 程序中肯定不可能手动的去操作, 这太麻烦了, 我们会调用一个 xxxTemplate(这个模板的套路应该都知道了, 是 spring 惯用套路, 之前的 JdbcTemplate,HibernateTemplate,RedisTemplate 应该还记得吧!) 的东西来发送消息, 然后消费消息也会有个类似监听器的东西自动监听, 我们完全不用操心.
贯彻 springboot 的优点, 尽量少的配置.
下一节我们说说 springboot 简单整合 RabbitMQ 吧! 对了, 建议大家好好找找有关 RabbitMQ 的博客看看, 因为知识点比较多, 以及持久化, 消息确认还有其他我没说到的细节都好好看看, 我也就只能说个大概的流程, 具体的要实际用了才知道.
来源: https://www.cnblogs.com/wyq1995/p/10038220.html