中国建设银行网站查询密码是什么,seo网站推广的主要目的是什么,电子商务网站 icp备案,宁波网站建站分布式通信#xff1a;消息队列
什么是消息队列#xff1f;
队列是一种具有先进先出特点的数据结构#xff0c;消息队列是基于队列实现的、存储具有特定格式的消息数据。消息以特定格式放入这个队列的尾部后直接返回#xff0c;不需要系统马上处理#xff0c;之后有其他…分布式通信消息队列
什么是消息队列
队列是一种具有先进先出特点的数据结构消息队列是基于队列实现的、存储具有特定格式的消息数据。消息以特定格式放入这个队列的尾部后直接返回不需要系统马上处理之后有其他进程从队列头部开始读取消息按照消息放入顺序逐一处理。
引入消息队列的好处是可以提升响应速度实现组件之间的解耦。
消息队列的工作原理
消息队列模式包括3个核心部分
生产者产生消息或者数据并将其插入到消息队列中。消息队列一种具有先进先出特点的数据结构用来存储消息。消费者从消息队列中获取消息进行相关处理。
生产者将发送的消息插入到消息队列称为入队消费者从消息队列中按照顺序取出消息进行处理称为出队。
RocketMQ工作原理
RocketMQ的架构图如下所示。
RocketMQ架构包括4部分
NameServer Cluster它和Kafka中的ZooKeeper类似提供分布式服务的协同和管理功能主要是和Broker相关的信息包括有哪些Broker、Broker地址和状态等以方便生产者基于它来发布消息消费者基于它来获取消息。Producer Cluster负责接收用户数据然后将数据发布到消息队列Broker Cluster。一般采用集群方式部署这样可以1多个Producer并发接收用户输入数据提升系统效率2增加可靠性。Consumer Cluster负责从Broker中获取消息进行消费。一般也是采用集群方式部署这样可以提升消费者的消费能力避免消息溢出或者丢弃。Broker Cluster负责存储Producer Cluster发布的消息并供消费者消费。Broker Cluster中的每个Broker都进行了主从设计即每个Broker分为Broker Master和Broker SlaveMaster既可以写也可以读Slave不可以写只可以读Broker Master会把接收到的消息同步给Broker Slave以实现数据备份一旦Broker Master崩溃可以切换到Broker Slave继续提供服务这样就提高了系统可靠性。
在Broker Cluster中消息的存储采用主题Topic 消息队列Queue的方式实现。
RocketMQ中的主题是一个逻辑概念一个主题可以分区分布在不同的Broker上每个Broker只有该主题的部分数据。每个主题分区中队列的数量可以不同由用户在创建主题时指定。队列是资源分配的基本单元消息进行存储时会存放到相应主题的分区中。
RocketMQ的工作流程如下
首先启动NameServer然后启动Broker。Broker启动后会主动找NameServer建立连接并将自己的信息注册到NameServer上。注册完毕后Broker会定期给NameServer发送心跳包心跳包中除了状态信息外还可以包括Broker当前存储的数据信息。创建主题并确定这个主题的数据存储到哪些Broker上。当Producer生产消息发送到主题时需要先到NameServer查询该主题存放在哪些Broker中获取到Broker信息后将消息发送给这些Broker进行存储。Consumer要从主题消费消息也需要首先到NameServer查询一下该主题的消息存储在哪些Broker上然后去相应的Broker获取消息进行消费。
消息队列模式是根据消费者需求到消息队列获取数据进行消费的消费者只需要知道消息队列地址消息队列中心无需提前知道消费者信息。因此消息队列模式比较适合消费者为临时用户的场景。
发布订阅模式和消息队列模式的区别
首先从实现解耦的数据结构看
发布订阅模式采用了消息中心消息队列模式采用了消息队列它们都是用来存储生产者发布的数据都有Topic、Broker等概念。发布订阅采用map或者数组等方式存储数据消息队列采用队列结构来存储数据。
其次从实现解耦方式来看
消息队列模式中生产者发布数据到消息队列中心消息队列中心会存储数据等待消费者按需获取数据这样生产者就不需要和消费者进行直接通信实现了生产者和消费者的解耦。发布订阅模式中消费者需要提前向消息中心订阅自己感兴趣的数据当生产者发布数据到消息中心后消息中心根据订阅者订阅信息讲数据主动推送给消费者实现了生产者和消费者的解耦。
消息队列中的消息可以被设置只消费一次、至少消费一次或者最多消费一次。