带着新人学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的应用01(springboot+mybatis+缓存 上)
上一篇结束,第一次做一个这么长的系列,很多东西我也是没有说到,也许是还没有想到,哈哈哈,不过基本的东西还是说的差不多了的.假如以后碰到了不会的,随便查查资料配置一下就ok. 咳,还有大家如果把我前面的 ...
- 带着新人学springboot的应用07(springboot+RabbitMQ 下)
说一两句废话,强烈推荐各位小伙伴空闲时候也可以写写自己的博客!不管水平高低,不管写的怎么样,不要觉得写不好或者水平不够就不写了(咳,我以前就是这样的想法...自我反省!). 但是开始写博客之后,你会发 ...
- 带着新人学springboot的应用04(springboot+mybatis+redis 完)
对于缓存也说了比较多了,大家对下图这一堆配置类现在应该有些很粗略的认识了(因为我也就很粗略的认识了一下,哈哈!),咳,那么我们怎么切换这个缓存呢?(就是不用springboot提供的默认的Simple ...
- 带着新人学springboot的应用13(springboot+热部署)
spring cloud我想做成一个系列,所以spring cloud+eureka后面会慢慢说到的,有兴趣的小伙伴可以关注后续! 这一节就简单说说springboot的热部署了(我一直想不通为什么叫 ...
- 带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)
这次说个在大型项目比较常见的东西,就是分布式,分布式到底是个什么东西呢?概念太大,不好说,就像刚学javaee的人问你,什么是web啊,什么是spring啊等等,你可能觉得,这个东西我好像知道,但是用 ...
- 带着新人学springboot的应用10(springboot+定时任务+发邮件)
接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件. 1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写 ...
- 带着新人学springboot的应用09(springboot+异步任务)
本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...
- 带着新人学springboot的应用08(springboot+jpa的整合)
这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...
- 带着新人学springboot的应用05(springboot+RabbitMQ 上)
这次就来说说RabbitMQ,这个应该不陌生了,随便一查就知道这个是用来做消息队列的.(注意:这一节很多都是概念的东西,需要操作的比较少) 至于AMQP协议(Advanced Message Queu ...
随机推荐
- ubuntu“少折腾”
1.python版本默认python3 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 sudo ...
- vue-cli 2篇官方文档记录收藏
https://cli.vuejs.org/guide/ http://vuejs-templates.github.io/webpack/
- springmvc是如何工作的
上图便是springmvc的工作流程,看着条条框框的,其实说的直白一点,springmvc就是负责处理用户的需求(request/url),它的负责人(核心组件)就是前端控制器(DispatcherS ...
- 在Github上为项目添加多个用户
点击项目目录中的Settings 点击Collaborators 添加后,合作者会受到确认邮件,等待合作者确认后,合作者就可以提交了 添加组织 在Settings中找到Organizations 点击 ...
- FTP连接超时
今天程序在连接FTP服务器,突然无法连接,用Windows 的 Explorer能正常连接,但用 WebRequest.WebResponse连接时,总是抛出连接超时异常. 后查找相关资料,原因是:程 ...
- Windows下安装Kafka
一.安装JDK 二.安装zooeleeper 下载安装包:http://zookeeper.apache.org/releases.html#download 下载后解压到一个目录: 1.进入Zook ...
- 真正的ddos防御之道,简单干脆有效!
话说,30G 就各种发博客 BB,唉,坦白说 ,博客园团队真心没见过世面 来 各位 先看图 啥意思呢? 就是哥的 最高防御是 600G. 没错,基本对当时的游戏没啥大的影响,10秒内恢复. 因为时间 ...
- C# datatable 重新排序
DataTable table = distributionManageService.Tb_fund_withdrawaGetPageList(pagination, queryJson);//设置 ...
- 动态规划-LIS
https://vjudge.net/contest/297216?tdsourcetag=s_pctim_aiomsg#problem/E #include<bits/stdc++.h> ...
- SQL server SELECT 语句的基本结构
SELECT select_list [INTO new_table] [FROM table_source] [WHERE search_condition] [GROUP BY GROUP_BY_ ...