MQ是消息队列服务器,产品:ActiveMQ,RabbitMQ,RocketMQ,Kafka……
消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已
RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue Protocol)协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一
当用户注册,给邮箱和手机都发送验证信息
用户注册需要50ms、发邮箱需要50ms、发手机需要50ms,总共需要150ms
用户注册后、将发邮箱和发手机都放到消息队列中,可以通过消息队列进行异步处理,总共可以节省50ms
多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败
广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况
按照目前网络上的资料,RabbitMQ
、activeM
、ZeroMQ
三者中,综合来看,RabbitMQ
是首选。
ZeroMq
不支持,ActiveMq
和RabbitMq
都支持。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消息不会丢失的机制。
可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统等等。
RabbitMq
/ Kafka
最好,ActiveMq
次之,ZeroMq
最差。当然ZeroMq
也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。
毋庸置疑,RabbitMQ
最高,原因是它的实现语言是天生具备高并发高可用的erlang
语言。
RabbitMq
比Kafka
成熟,在可用性上,稳定性上,可靠性上,RabbitMQ胜于 Kafka(理论上)。
另外,Kafka
的定位主要在日志等方面, 因为Kafka
设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq
。
还有就是,Kafka
的性能(吞吐量、TPS
)比RabbitMq
要高出来很多。
下载网址:http://www.erlang.org/downloads
选择自己的安装目录,全程下一步
配置path,为ERLANG_HOME\bin
cmd下输入erl
下载网址:http://www.rabbitmq.com/download.html
双击安装包,全程下一步
进入RabbitMQ的sbin目录,打开cmd
执行命令:rabbitmq-plugins enable rabbitmq_management
path环境变量中添加:%RABBITMQ_HOME%\sbin;
管理员运行cmd
1、执行命令:rabbitmq-service.bat remove
2、在RabbitMq任意路径下,建立目录data
3、执行命令,路径改为刚才创建的名录:set RABBITMQ_BASE=D:\rabbitmq_server\data
4、执行命令:rabbitmq-service.bat install
5、执行命令:rabbitmq-plugins enable rabbitmq_management
6、在管理服务中启动服务就可以了、启动输入命令:services.msc
http://localhost:15672
初始的账号密码都是:guest
docker pull daocloud.io/library/rabbitmq:3.7.26-management
docker run -d --net=host --name some-rabbit --privileged=true daocloud.io/library/rabbitmq:3.7.26-management
开启完毕之后,会暴露2大端口
如果没有关闭防火墙,请暴露端口
firewall -cmd --permanent --add-port=5672/tcp --permanent
firewall -cmd --permanent --add-port=15672/tcp --permanent
firewall -cmd --reload