一篇文章,想了很久,Spring-data-jpa,Spring-secuity都是想写的,不过由于代码量和深度都不小,最近又在使用mq,就想写一些关于mq的使用和看法,等mq结束,就准备Spring-data-jpa的编写。下班晚,家离的又远,常常回家就快11点了,所以就利用晚上回家的一点时间,以及早上5点钟左右起来写文章,想一边写,一边知识的积累,一边给大家一些干货的分享,文章是自己写,所以可能会有一些代码或者是架构,知识点上的问题,希望大家多多见谅,能多多的反馈。
RabbitMQ是一个消息代理。官方的解释是可以把它理解成一个邮局,当你把你想要发布的邮件放在邮箱中时,你可以确定邮差先生最终将邮件发送给你的收件人。在这个比喻中,RabbitMQ是邮政信箱,邮局和邮递员。再通俗一点就是我们比如有一个发邮件的业务,用户注册成功后发送邮件进行通知,如果我们一直等待邮件成功的返回,这样就会造成线程的阻塞,当然我们可以直接new一个线程来处理这个业务,但是如果邮件API挂掉或者是其他的网络问题,我们并不能保证邮件就会成功的发送。这时我们就可以用到消息队列-MQ。再举个栗子,比如王者荣耀,在我们开局的时候会有野怪和主宰刷新,我们可以这么理解,1.腾讯的服务器发送消息,我要生成红buff,蓝buff,生产者生产消息2. 然后MQ接受到消息了,放在队列中,地图上出现野怪3. 韩信去打野,消费者进行消费--------------------------------------------------------------------------------至于为什么用到MQ,个人认为是 :1. 异步通信,这算我们去用MQ的根本原因吧!!!!2. 解耦、扩展性,MQ在处理过程中间插入了一个类似与适配器模式的接口层,我们只需要关心两端的实现就可以。3. 送达保证,只要保证我们的消息被成功送到MQ,MQ就会保证我们的消息执行(当然,MQ集群全部挂掉除外,~集群都挂了,这得什么骚操作)4. 可恢复性,即使上面的MQ集体Over了,还有可恢复性可用MQ在业界的使用颇广,各种社区很活跃。所以各位童鞋可以大胆放心的去用。至于消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。我们接下来主要讲解的是RabbitMQ。安装
下载Erlang. 原因是因为RabbitMQ是基于Erlang编写的,下载地址:http://www.erlang.org/downloadsb. 下载RabbitMQ 在上一步安装Erlang后就可以下载RabbitMQ了,地址是: https://www.rabbitmq.com/c. 在测试的时候,我曾经看过好多篇文章,安装前要配置Erlang的环境变量,但是我没配,结果还是安装成功,大家可以用自行把握d.安装管理页面 RabbitMQ-Plugins 相当于一个管理页面,可以方便的让我们查看各个消息队列以及连接情况等。 首先进入rabbitmq的sbin目录
然后运行rabbitmq-plugins enable rabbitmq_management,安装这个插件,
这样就安装成功了,据说这一步会安装出错,我没报错也模拟不了,给各位一些提示:
rabbitmq-service stop 停止服务,然后 rabbitmq-service stop ,接着rabbitmq-service install --> rabbitmq-service install最后rabbitmq-plugins enable rabbitmq_management。就是移除服务,重新安装启动。e: 进入管理页面
在安装插件成功后,浏览器进入http://localhost:15672/。就可以第一次输入的时候,完全打不开,还以为是自己的环境没安装好,没想到一会就好了,应该有个延迟的启动时间吧。在打开后,出现这个界面
代表已经安装Rabbit-MQ服务成功,当然,不安装rabbitmq-plugins 也可以。
初次登录的时候用户名和密码都是guest,当然是可变的。
点击Connections后,出现下图
因为我此时连了1台消费者。
Rabbit-MQ 相关概念
producer:消息生产者onsumer:消息消费者virtual host:虚拟主机,相当于顶层接口,我们只能在顶层做操作channel : 通信管道exchange :交换机,根据路由的key 来发送消息到相应的队列queue:消息队列,用于存放我们发送到队列的消息最后就是broker,相当于MQ的服务端,包括exchange和queue
简单使用
什么都不说了,直接上代码:
这是一个消费者,我们直接运行,控制台输出
这是一个生产者,我们也运行
然后在消费者的控制台中,我们可以看到
一个简单的mq消息发送就成功了
好了,这篇就写到这里了,下一篇我们将介绍更加深入的东西。