产自:后端三郎
时间:刚刚
参考:B站编程不良人
目录
1.MQ安装教程
Docker安装MQ(没有docker的先安装docker,第一篇是安装docker,第二篇是docker安装MQ)
三郎之——Centos7安装Docker_后端三郎@ZYJ的博客-优快云博客Centos7安装Dockerhttps://blog.youkuaiyun.com/ZhAoYaJ/article/details/122457714?spm=1001.2014.3001.5501
2.什么是MQ
MQ(Message Quene):翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松实现系统间解耦。别名为消息中间件,通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
3.MQ有哪些
当今市面上有很多主流的消息中间件,如老牌的ActiveMQ,RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的RocketMQ等。
4.不同MQ特点
#1.ActiveMQ特点
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。他是一个完全支持JMS规范的消息中间件。丰富的API,多种集群架构模式让ActiveMQ在业界成为老牌的消息中间件,在中小型企业颇受欢迎。
#2.Kafka特点
Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费。
追求高吞吐量,一开始的目的就是用于日志的传输和收集。0.8版本开始支持复制,不支持事务,对消息的重复,丢失,错误没有严格要求。
适合产生大量的互联网服务的数据收集业务。
#3.RocketMQ特点
RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量,高可用性,使用大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,他对消息的可靠传输以及事务做了优化,目前在阿里集团被广泛应用于交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。
#4.RabbitMQ特点
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现,AMQP主要特征是面向消息,队列,路由(包括点对点和发布/订阅),可靠性,安全。
AMQP协议更多用在企业系统内对数据的一致性,稳定性和可靠性要求很高的场景。
对性能和吞吐量的要求还在其次。
注:RabbitMQ安全系数高,更加可靠,kafka更适用于日志的处理。
5.web管理页面介绍
Connections:无论生产者还是消费者,都需要与RabbitMQ建立连接后才可以完成消息的生产和消费,在这里可以查看连接情况
Channels:通道,建立连接后,会形成通道,消息的投递获取依赖通道。
Exchanges:交换机,用来实现消息的路由
Queues:队列,即消息队列,消息存放在队列中,等待消费,消费后被移除队列。
Admin:用户管理,用户权限设置,新增用户等操作。
5.1Admin用户和虚拟主机管理
(1)添加用户
上面的Tags选项,其实是指定用户的角色,可选的有以下几个:
超级管理员(Administrator)
可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
监控者(Monitoring)
可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
策略制定者(policymaker)
可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
普通管理者(Management)
仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
(2)创建虚拟主机
解释:为了让各个用户可以互不干扰的工作,RabbitMQ添加了虚拟主机(Virtual Hosts)的概念。其实就是一个独立的访问路径,不同用户使用不同路径,各自有自己的队列、交换机,互相不会影响。
(3)虚拟主机和用户绑定
进入虚拟主机配置
绑定用户和虚拟主机
用户和虚拟主机绑定成功
6.RabbitMQ支持的消息模型
第一种模型:直连
第二种模型:work quene
第三种模型:Publish/Subscribe
第四种模型:Routing
第五种模型:Topic
6.1引入依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.2</version>
</dependency>