海码充电站的技术专栏 java Coder

浅谈队列

2018-12-27
watermelon


队列

前言

消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段。它具有 低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。
当前使用较多的 消息队列 有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分 数据库 如 Redis、MySQL 以及 phxsql 也可实现消息队列的功能。

1、基本构成

消息系统通常都会由生产者,消费者,Broker三大部分组成,生产者会将消息写入到Broker,消费者会从Broker中读取出消息,不同的MQ实现的Broker实现会有所不同,不过Broker的本质都是要负责将消息落地到服务端的存储系统中

2、消息队列的的传输模式

1:点对点模型

点对点模型 用于 消息生产者 和 消息消费者 之间 点到点 的通信。
消息生产者将消息发送到由某个名字标识的特定消费者。
这个名字实际上对于消费服务中的一个 队列(Queue),在消息传递给消费者之前它被 存储 在这个队列中。
队列消息 可以放在 内存 中也可以 持久化,以保证在消息服务出现故障时仍然能够传递消息。

特点:

  • 每个消息只用一个消费者;
  • 发送者和接受者没有时间依赖;
  • 接受者确认消息接受和处理成功。
2:发布/订阅模型(Pub/Sub)

特性:

  • 每个消息可以有多个订阅者;
  • 客户端只有订阅后才能接收到消息;
  • 持久订阅和非持久订阅。

注意:

  • 发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息;
  • 持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线;
  • 非持久订阅:订阅者为了接受消息,必须一直在线。当只有一个订阅者时约等于点对点模式

3、消息队列技术对比

队列

拓展:


Comments

Content