带着新人学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 ...
随机推荐
- SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤
在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能. 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础 ...
- c++链表基本操作
#include <stdlib.h> #include <malloc.h> #include <stdio.h> typedef struct Node { i ...
- node02
1.使用已有的知识实现一个简单的登录和注册的界面 请求有请求接口有请求页面的,我们需要加以区分 以下是客户端代码 <!DOCTYPE html> <html lang="e ...
- java DTO对象与PO对象的相互转换
2018-09-27 10:27:50 前言: 在实际开发中往往需要DTO对象与PO对象的相互转换: 先说说什么是DTO对象吧,个人觉得DTO就是PO的扩展而已,PO专门指向数据库,DTO作扩展(字段 ...
- data.table包使用应该注意的一些细节
fread中nThread 参数的使用 注意默认nThread=getDTthreads(),即使用所有能用的核心,但并不是核心用的越多越好,本人亲自测试的情况下,其实单核具有较强的性能,只有在数 ...
- swoole+websocket+redis实现一对一聊天
如同web端的QQ和微信一样,这是一个web端的聊天程序. 环境:ubuntu + php + swoole扩展 + redis + mysql Redis 实现每个连接websocket的服务都唯一 ...
- python 外键用法 多对多关系 ORM操作 模板相关
一.app/models中写类(设计表结构) 1.普通类 class A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...
- Array.from();Object.keys();Array.map()
Array.from():方法从一个类似数组或可迭代对象创建一个新的数组形式: const bar = ["a", "b", "c"]; A ...
- [转]jenkins2 插件安装
文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd Jenkins的安装包和插件在7个国家有20多个镜 ...
- Java提高篇(二):IO字节流、字符流和处理流
在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写. 一.字节流 下面是一个字节流的实例: import java.io.*; public class I ...