四种消息队列,如何选型?( 三 )


看到这里,大家应该可以发现,RocketMQ 的设计和 Kafka 真的很像!
2.3 RabbitMQRabbitMQ 2007 年发布 , 是使用 Erlang 语言开发的开源消息队列系统 , 基于 AMQP 协议来实现 。
AMQP 的主要特征是面向消息、队列、路由、可靠性、安全 。AMQP 协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景 , 对性能和吞吐量的要求还在其次 。
重要概念

  • 信道(Channel):消息读写等操作在信道中进行,客户端可以建立多个信道 , 每个信道代表一个会话任务 。
  • 交换器(Exchange):接收消息,按照路由规则将消息路由到一个或者多个队列;如果路由不到 , 或者返回给生产者,或者直接丢弃 。
  • 路由键(RoutingKey):生产者将消息发送给交换器的时候,会发送一个 RoutingKey,用来指定路由规则,这样交换器就知道把消息发送到哪个队列 。
  • 绑定(Binding):交换器和消息队列之间的虚拟连接,绑定中可以包含一个或者多个 RoutingKey 。
RabbitMQ 工作原理AMQP 协议模型由三部分组成:生产者、消费者和服务端 , 执行流程如下:
  1. 生产者是连接到 Server,建立一个连接,开启一个信道 。
  2. 生产者声明交换器和队列,设置相关属性 , 并通过路由键将交换器和队列进行绑定 。
  3. 消费者也需要进行建立连接,开启信道等操作,便于接收消息 。
  4. 生产者发送消息,发送到服务端中的虚拟主机 。
  5. 虚拟主机中的交换器根据路由键选择路由规则,发送到不同的消息队列中 。
  6. 订阅了消息队列的消费者就可以获取到消息,进行消费 。

四种消息队列,如何选型?

文章插图
图片
常用交换器RabbitMQ 常用的交换器类型有 direct、topic、fanout、headers 四种,具体的使用方法,可以参考官网:
官网入口:https://www.rabbitmq.com/getstarted.html
  • 1.

四种消息队列,如何选型?

文章插图
图片
03 消息队列对比
四种消息队列,如何选型?

文章插图
图片
3.1 Kafka优点:
  • 高吞吐、低延迟:Kafka 最大的特点就是收发消息非常快,Kafka 每秒可以处理几十万条消息,它的最低延迟只有几毫秒;
  • 高伸缩性:每个主题(topic)包含多个分区(partition),主题中的分区可以分布在不同的主机(broker)中;
  • 高稳定性:Kafka 是分布式的,一个数据多个副本,某个节点宕机,Kafka 集群能够正常工作;
  • 持久性、可靠性、可回溯:Kafka 能够允许数据的持久化存储,消息被持久化到磁盘,并支持数据备份防止数据丢失,支持消息回溯;
  • 消息有序:通过控制能够保证所有消息被消费且仅被消费一次;
  • 有优秀的第三方 Kafka Web 管理界面 Kafka-Manager,在日志领域比较成熟,被多家公司和多个开源项目使用 。
缺点:
  • Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象 , 队列越多,load 越高 , 发送消息响应时间变长;
  • 不支持消息路由,不支持延迟发送,不支持消息重试;
  • 社区更新较慢 。
3.2 RocketMQ优点: