一:什么是MQ?
定义:消息队列
队列:即为一个消息管道,以管道的形式去做消息传递
二:市面上常见的消息队列开源组件有哪些?
1.ActiceMQ:是老牌的小心中间件,国内很多公司过去运用的还是非常广泛的,功能很强大,但是问题在于没办法确定ActiveMq可以支撑互联网公司的高并发,高负载以及高吞吐的复杂场景,在国内互联网公司落地较少
2.RebbitMQ:好处在于可以支撑高并发,高吞吐、性能很好,同时有非常完善便捷的后台管理界面可以使用。另外,他还支持集群化、高可用部署架构、消息高可靠支持,功能较为完善。而且经过研究,国内各大互联网公司落地大规模RabbitMQ集群支撑自身业务的case较多,国内各种中小型互联网公司使用RabbitMQ的实践也比较多
3.RockMQ:是阿里开源的,经过阿里的生产环境的超高并发、高吞吐的考验,性能卓越,同时还支持分布式事务等特殊场景。而且RocketMQ是基于Java语言开发的,适合深入阅读源码,有需要开源站在源码层面解决线上生产问题,包括源码的二次开发和改造
4.Kafka:提供的消息中间件的功能明显较少一些,相对上述几款MQ中间件要少很多。但是Kafka的优势在于专为超高吞吐量的实时日志采集、实时数据同步、实时数据计算等场景来设计。因此Kafka在大数据领域中配合实时计算技术(比如Spark Streaming、Storm/Filnk)使用的较多
三:使用场景
MQ的不足是:
1.系统更复杂,多了一个MQ组件
2.消息传递路径更长,延时会增加
3.消息可靠性和重复性互为矛盾,消息不丢不重难以同时保证
4.上游无法知道下游的执行结果,这一点是很致命的
什么时候用MQ?
1.数据驱动的任务依赖
2.上游不关心多下游执行结果
3.异步返回执行时间长
MQ主要解决哪些业务问题?
1.应用系统解耦
2.异步请求(同步请求)
3.流量消峰
搭建RabbitMQ环境
1.搭建Erlang的环境
新建一个系统变量:变量名为ERLANG_HOME,变量值为安装Erlang的路径(路径中不要包含bin目录)
2.将新建的系统环境变量添加在PATH中,格式为%ERLANG_HOME%\bin
使用erl命令查看是否安装成功
添加admin用户
用户角色
(1)超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2)监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3)策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下),同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。与administrator的对比,administrator能看到这些内容
(4)普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5)其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
添加虚拟机
设置权限