简单看看使用场景:

  运用场景1:比如大家注册博客园的时候,注册信息写入数据库之后,还需要激活吧!你要等博客园的一个线程给你发邮件,假如这个时候注册的人很多,那就需要非常多的线程,大家也知道线程到达一定数目效率反而是降低的,而且只有等到邮件给你发送之后你才知道注册成功,你就可能一直卡了几分钟。所以这个时候,就把很多个发邮件需要的消息放到一个消息队列中你就马上收到响应“注册成功”,然后你就可以去玩玩手机,等一下就会收到邮件,其实对博客园来说,只需要几个或者几十个线程慢慢的从这个队列中取消息、一个一个慢慢发邮件就是了。

  运用场景二:大家都知道双11,淘宝各种活动,假如一个店铺生意特别好,一下子卖了十几万件。那么假如每个人都是提交订单,还要去库存那边查查之后再调用方法减库存,然后再给你响应订单成功,emmmm....你就慢慢等十几分钟吧!用户体验贼差!但是直接把所有订单消息给消息队列(也叫做消息中间件),然后立刻给用户响应:订单成功!用户可以想干嘛就干嘛去了,而这边的库存系统只需要从消息队列中慢慢拿数据就ok,假如没货了还能通知店主补充货物。

  运用场景三:很多秒杀活动,就在那一秒钟看谁的是单身三十年的手速了!然而秒杀的点击量太高,会把那个系统卡爆了。。。所以做了一个限制,将前n个人点击的消息放入消息队列(可以就设置这个队列长度为1,那么第二个及之后的消息自动全部舍弃),后面的无论多少点击,直接丢掉并响应秒杀失败!而秒杀业务只需要慢慢从这个队列取消息就可以做后续的操作了。

  

  简单的下载安装一下,因为这个RabbitMQ是用erlang这个语言开发的(反正我是没有用过这个语言....),虽然我们不用,但是RabbitMQ启动的时候要用这个的环境。

  就像我们的java程序要运行,肯定要jre啊,这是一个道理!所以下载一个erlang(这个读音是不是挺像二郎啊,哈哈!话说RabbitMQ,Rabbit是兔子的意思,M指的是Message,Q代表Queue,我猜意思是不是兔子消息队列啊,哈哈哈)

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

  至于AMQP协议(Advanced Message Queuing Protocol),专业名称叫做高级消息队列协议,就是只要你遵守这个协议,那么做出来的产品就能跨平台,跨语言,很牛的一个协议,具体多么牛可以自己百度一下。

  而RabbitMQ就是基于这个协议的!很多语言都可以用RabbitMQ,例如python,C语言,PHP,Java等语言,而且windows,linux,macos等平台都可以使用。。。

1.RabbitMQ的简单安装

  新建一个文件夹,把erlang和RabbitMQ放在一起。

  下载relang地址:http://erlang.org/download/,多往下翻!!!我用的是下图的这个,版本可以根据条件选择。下完之后安装,然后就一直next就ok了 ,存放的位置自己看着办。(我用360极速浏览器下了三次都没成功,用了谷歌一次就成功了,可还各种给我提醒不安全、对电脑有害,emmmm......看我电脑今天会不会爆炸)

  

  一番努力之后这个erlang下好了,然后到http://www.rabbitmq.com/install-windows.html下载,如果点了下面这个跳转到了github,就点9M多的那个文件进行下载,下完之后也是一直下一步。

  ok,两个不知道什么鬼的软件下好了,我们就能够看到这两个文件夹,其中erl文件夹没什么用,我们把重点放在rabbitmq_server,看名字就知道这个就是一个服务端,只要启动它,我们基本的功能就能用了(虽然我们也就只会用到基本的功能)

  

  打开rabbitmq_server-3.7.9,有个sbin,进去,打开命令窗口

  然后运行命令

  第一种:rabbitmq-plugins.bat enable rabbitmq_management(用了这个命令就可以直接在浏览器里可视化的看到RabbitMQ内部的数据了,类似Druid)

  第二种:"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin\rabbitmq-plugins.bat" enable rabbitmq_management

  其实我感觉两种应该是一样的,但是可能会碰到秘之错误,看情况用啊!出现类似下图这个界面就ok了(因为这个命令我运行了一次了,所以可能有些出入,但大概的应该差不多),还有估计还会有其他的错误,其实很正常,试试命令net stop RabbitMQ && net start RabbitMQ,重启一下试试,没用的话就慢慢百度是什么错误吧!

  到此安装成功,打开浏览器,输入url:http://localhost:15672,用户名和密码都是:guest

  登录成功,出现如下这个页面就成功了。

  话说这个RabbitMQ可以添加新用户,权限啊什么的,emmm....我们就自己用的,不搞这么麻烦了。

  如果不小心关闭了RabbitMQ服务端或者下次再想开启,可以在安装目录xxx\rabbitmq_server-3.7.9\sbin,双击rabbitmq-server.bat就开启服务端了,当然你也可以去设置windows服务。

2.RabbitMQ名词解释(核心是RoutingKey,交换器和绑定)

  Publisher(生产者):其实就是一两行代码或者一个程序,调用一个什么方法发送一个消息

  Message(消息):由消息头和消息体组成。消息体是真正要发送的数据,消息头里面可以设置属性RoutingKey,其他属性碰到再说

  Exchange(交换器):接收生产者传过来的消息,按照一定的规则丢给指定的Queue,具体什么规则跟交换器类型有关,只说三种,direct(默认类型,那两个key一定要一样才会发给指定的一个或几个Queue),fanout(不管什么key了,给所有Queue发一遍消息,类似微信公众号的功能),topic(两个key模糊匹配一下,差不多就行了,然后发给一个或几个Queue)

  Queue(消息队列):存消息的容器,其实就类似一个List集合,就是放对象的容器,而且有顺序。

  Binding(绑定):其实就是交换器和Queue的绑定,说白了就是靠那个BindingKey(默认会用Queue的名字)嘛!注意,交换器和Queue是多对多的关系!!!一个虚拟主机可能有多个交换器,一个交换器可以绑定多个队列,一个队列也可以绑定多个交换器。

  Connection(网络连接):emmmm....消息到达交换器、消费者从队列取消息总不可能是凭空就能做吧?肯定要建立连接啊,这里是TCP连接

  Channel(信道):就是Connection里面很多条通道,就跟公路一样,分为很多个车道,让流通更快嘛!而且每个消费者去队列取消息都开启一个TCP,那么很浪费资源,也就是会很卡。

  消费者(Consumer):表示一个程序或一两行代码,从队列拿消息。

  Virtual Host(虚拟主机):专业的话来说就是一个RabbitMQ服务器,可以设置很多个虚拟主机,每个虚拟主机都可以看作一个迷你型的RabbitMQ,虚拟主机之间隔离。emmmm....不就是跟电脑的虚拟机一个道理吗???,默认的虚拟主机url是“/”,我们还可以设置其他的虚拟主机“/abc”,"/ccd",随意。。。

  Broker:代表消息队列服务主体,在我们这里不就是RabbitMQ服务器嘛!

3.说说RabbitMQ的基本概念

  刚开始说专业名词很是头痛,而听不懂,我就来用一个小场景来引出一些概念。

  小王,小李和小陈一起去路边小饭店吃饭,这个饭店规模不大,就一个厨师,一个服务员,我们要吃饭,怎么办呢?首先是跟服务员点菜,就点两个菜,清炒小白菜和鱼香肉丝,然后服务员将点好的菜单丢给厨师师傅做。

  场景一: 厨师做好了,把一盘小白菜给服务员,说了一句“这是清炒小白菜”,服务员就端着小白菜就跑过来了,对那三人也说了一句“这是清炒小白菜”,然后放桌子上,服务员就走了;那三人没过几秒钟就把小白菜吃完了。过了一会儿,鱼香肉丝做好了,根据上面的步骤又走了一遍,鱼香肉丝也被拿到桌子上,慢慢的等着被吃,服务员在这过程中是离开的,而且无论点了多少个菜,都是这样的流程;等三人吃饱喝足之后,三人也就走了,剩下的空碗空盘子和桌子会被处理。

  这里涉及几个关键的地方:厨师,一盘小白菜,“这是清炒小白菜”,服务员,“这是清炒小白菜”,桌子,三人,服务员离开,吃完了,桌子被处理

  好了,故事听完了,现在看看RabbitMQ的大概原理:生产者(Producer,或者叫做Publisher)生产消息(Message),并为消息设置一个路由键(Routing key),将消息交给交换器(Exchange),交换器通过一个绑定键(Binding key)和一个消息队列绑定,只有当路由键和绑定键相同的时候,交换器就会将消息丢给消息队列(Message Queue),然后交换器就不管了,然后消费者(Consumer)过来取队列中的消息,取完一个消息队列就删除一个。

   我随便找个图可以看一下,下图所示:broker在这里指的就是RabbitMQ

  想想啊,小饭店可能就只有一个厨师,一个服务员,就只有你们一桌人在吃饭,但是五星级大酒店呢?肯定是厨师师傅十几个甚至几十个,服务员更是很多,吃饭的人也是多不胜数,很多桌都有老板在吃饭,而消息中间件也是一样。

  实际情况就是:生产者可能有多个,交换器可能有多个,Queue可能有多个,消费者也可能有多个,下图也只是粗略的显示了一下几个关键点。下图的那个RoutingKey其实指的是:交换器根据不同Message内的RoutingKey,交换器和不同Queue绑定的Binding key,将这两个key比较一下(要符合一定的规则),交换器就会把消息丢到目的Queue内。

初学springboot的应用相关推荐

  1. 初学SpringBoot之三

    原教程如是http://blog.csdn.net/lxhjh/article/details/51753852. 记录问题: 1.maven工程导入后,pom.xml文件报错:"faile ...

  2. 初学Springboot使用MyBatis-Plus出现Invalid bound statement (not found)的解决

    出现问题: 学习Springboot时出现找不到mapper里的方法,很奇怪通用的MP能使用,自己定义的MP就会出现上面的问题,看了自己写的mpper映射路径啥的都没有问题 疯狂百度查找,替换版本,好 ...

  3. 初学springBoot,遇到空白标签错误页面

    有时候Whitelabel Error Page错误,只是因为不细心首先遇到了status=404的错误,后来经过查询,发现是pom.xml中没有添加thymeleaf的依赖,添加好了后,遇到如图st ...

  4. Springboot搭建个人博客系列

    前言 为什么想要搭建这个博客? 我还记得,在大二寒假的某天,同往常一样的在家解决这某个bug,不停地问度娘,很巧的碰到了一个同行在他的博客中完美的记录了我的bug的解决方案,随后我又看了看他写的其他博 ...

  5. 介绍一款基于SpringBoot开发OA开源产品

    办公自动化(OA)是面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,极大提高公司的办公效率. 1.项目介绍 oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于sprin ...

  6. SpringBoot开发常用技术这些你知道吗???

    初学SpringBoot,只浅在的学了,所以内容比较简单,代码可能比较多,因为现在我注重于用还没有研究其底层,所以看完本文章每一章节理解后,能自己敲一遍,明白其流程,实现功能便可,文中若有纰漏望指出ψ ...

  7. SpringBoot之从零搭建博客网站

    前言 为什么想要搭建这个博客? 程序员从业8年,期间学过一些东西,用过一些东西,然后遗忘,然后再次翻书,周而复始,少有总结的时候. 少时学编程,有时颇有趣味.有所悟.有所得.豁然开朗.别有洞天的感觉, ...

  8. 基于SpringBoot开发的企业OA自动化办公系统

    一.项目介绍 一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架 ...

  9. 基于SpringBoot的企业人事管理系统

    基于SpringBoot的企业人事管理系统 面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,极大提高公司的办公效率.oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于s ...

最新文章

  1. 几种可直接使用的架构模式及其使用场景
  2. 30 万奖金悬赏 | CSDN 软件开发精英赛即日启动!
  3. SVM支持向量机--sklearn研究
  4. python控制窗口显示隐藏
  5. html可以有多个main吗,main和div
  6. 【LiveVideoStack线上分享】— 视频生产环境下的音视频解决方案
  7. 20199计算机二级java答案_计算机二级Java练习题-2019.9
  8. 一个在PDO数据绑定上踩的坑
  9. 【codevs1163】访问艺术馆,圣战の终焉
  10. 最简单判断系统大小端
  11. hive中groupby优化_hivesql : hive.groupby.skewindata 和hive.map.aggr 组合的坑
  12. linux7mysql集群_linux下mysql集群搭建
  13. upload.render多文件上传怎么实现一次性上传多个文件_照片和视频怎么检索?请使用属性查询...
  14. 推荐一款基于bootstrap的漂亮的前端模板—inspinia_admin
  15. 草图大师SketchUp 2022 安装教程
  16. 如何操作最快的硬盘对拷工具
  17. 常用八大数据结构总结及应用场景-附示例截图
  18. 小米云服务器怎么管理员密码,小米路由器初始密码是什么 小米路由器管理密码是多少-192路由网...
  19. 基于最大似然估计(matlab实验)
  20. Java用普里姆算法(prim)解决修路最短路径问题

热门文章

  1. 数据结构c语言版课设,数据结构课程设计c语言版
  2. 全国大学生智能车竞赛技术报告细则
  3. Cocos Creator之微信小游戏的游戏圈
  4. 罗斯蒙特3300HT-10-30 高性能 pH/ORP 传感器
  5. 【TensorFlow】TF不支持GPU,The minimum required Cuda capability is 3.5.
  6. 实现医生工作站的处方模板功能的代码(十一)
  7. 使用预训练的卷积神经网络
  8. HTML实例原型设计
  9. 基于stm32F4智能手环设计
  10. 第五人格服务器6月维护,第五人格6月20日为何维护[多图]