带着新人学springboot的应用06(springboot+RabbitMQ 中)

Posted java小新人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带着新人学springboot的应用06(springboot+RabbitMQ 中)相关的知识,希望对你有一定的参考价值。

  上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个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的博客看看,因为知识点比较多,以及持久化,消息确认还有其他我没说到的细节都好好看看,我也就只能说个大概的流程,具体的要实际用了才知道。

以上是关于带着新人学springboot的应用06(springboot+RabbitMQ 中)的主要内容,如果未能解决你的问题,请参考以下文章

带着新人学springboot的应用13(springboot+热部署)

带着新人学springboot的应用09(springboot+异步任务)

带着新人学springboot的应用05(springboot+RabbitMQ 上)

带着新人学springboot的应用01(springboot+mybatis+缓存 下)

带着新人学springboot的应用01(springboot+mybatis+缓存 中)

带着新人学springboot的应用12(springboot+Dubbo+Zookeeper 下)