上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个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 中)的更多相关文章

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

    上一篇结束,第一次做一个这么长的系列,很多东西我也是没有说到,也许是还没有想到,哈哈哈,不过基本的东西还是说的差不多了的.假如以后碰到了不会的,随便查查资料配置一下就ok. 咳,还有大家如果把我前面的 ...

  2. 带着新人学springboot的应用07(springboot+RabbitMQ 下)

    说一两句废话,强烈推荐各位小伙伴空闲时候也可以写写自己的博客!不管水平高低,不管写的怎么样,不要觉得写不好或者水平不够就不写了(咳,我以前就是这样的想法...自我反省!). 但是开始写博客之后,你会发 ...

  3. 带着新人学springboot的应用04(springboot+mybatis+redis 完)

    对于缓存也说了比较多了,大家对下图这一堆配置类现在应该有些很粗略的认识了(因为我也就很粗略的认识了一下,哈哈!),咳,那么我们怎么切换这个缓存呢?(就是不用springboot提供的默认的Simple ...

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

    spring cloud我想做成一个系列,所以spring cloud+eureka后面会慢慢说到的,有兴趣的小伙伴可以关注后续! 这一节就简单说说springboot的热部署了(我一直想不通为什么叫 ...

  5. 带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)

    这次说个在大型项目比较常见的东西,就是分布式,分布式到底是个什么东西呢?概念太大,不好说,就像刚学javaee的人问你,什么是web啊,什么是spring啊等等,你可能觉得,这个东西我好像知道,但是用 ...

  6. 带着新人学springboot的应用10(springboot+定时任务+发邮件)

    接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件. 1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写 ...

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

    本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...

  8. 带着新人学springboot的应用08(springboot+jpa的整合)

    这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...

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

    这次就来说说RabbitMQ,这个应该不陌生了,随便一查就知道这个是用来做消息队列的.(注意:这一节很多都是概念的东西,需要操作的比较少) 至于AMQP协议(Advanced Message Queu ...

随机推荐

  1. CICD - Teamcity 配置之一: 数据库自动部署

    数据库开发过程不是一次完成的,也是一个迭代的过程.如何快速开发和部署新的数据库对象,部署到不同的环境中,还有就是可不可以快速重建数据库对象,这里不包括数据部分. 首先从官网下载Teamcity:htt ...

  2. Windows远程桌面相关

    3389端口是Windows系统远程终端服务以及系统远程桌面服务默认所使用的端口,原本是为了管理人员能够方便的远程维护管理计算机而设计的,但如今已经成为了黑客们最喜爱的一种人侵途径,入侵者通过3389 ...

  3. 用ttBulkCp把excel中的数据导入到timesten数据库中

    最近要做数据预处理,需要用到数据库.而且是以前从来没听说过的TimesTen. 首要目标是要把Excel里的数据,导入到TimesTen数据库中.而TimesTen在win10里用不了,于是我就在虚拟 ...

  4. 获取标准shell 命令的输出内容

    cmdline.h #include <iostream> #include <mutex> class Cmdline { private: Cmdline() = defa ...

  5. java课程之团队开发冲刺阶段1.2

    一.总结昨天进度 1.三个任务都已经实现 2.使用时间:四个小时左右 二.遇到的困难 1.对Android原生的侧拉任务栏不了解,导致使用的时候出现了一部分问题 三.今天任务规划 1.对之前的程序重新 ...

  6. 常用的js效果

    使用jquery实现鼠标悬停显示层 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  7. High Availability手册(3): 配置

    各种配置在命令行状态下,多用crm进行 Global Cluster Options 这个类型是全局配置,主要包含下面两个: no-quorum-policy quorum的意思是最低法定人数,pac ...

  8. S-CMS企建v3二次SQL注入

    S-CMS企建v3二次SQL注入 0x01 前言 继上一篇的S-CMS漏洞再来一波!首发T00ls 0x2 目录 Sql注入二次SQL注入 0x03 Sql注入 漏洞文件:\scms\bbs\bbs. ...

  9. Javascript高级编程学习笔记(89)—— Canvas(6) 变换

    变换 通过上下文的变化,可以对图像进行处理后再将其绘制到画布上 当我们创建上下文时,会以默认值初始化变化矩阵,在默认的变换矩阵下所有处理都按描述直接绘制. 而当我们为上下文应用变换时,会导致使用不同的 ...

  10. Javascript高级编程学习笔记(88)—— Canvas(5)绘制文本

    绘制文本 同样的,canvas也为绘制文本提供了相应的方法. 2D上下文提供的文本绘制方法主要有两个: fillText() strokeText() 这两个方法都接受四个参数 要绘制的文本字符串 绘 ...