消息队列点到点模式和发布订阅模式

Table of Contents

概念简述

两者区别

流行消息队列的消息模型比较

RabbitMQ

Kafka

Pulsar


概念简述

JMS 规范支持两种消息模型:点到点、发布订阅。

点到点模式:生产者将消息发送到队列中,然后消费者去队列中消费信息。消息被消费之后,队列会移除已经被消费的消息。队列支持多个消费者,但是一个消息只能被一个消费者消费。

发布订阅模式:生产这将消息发送到 Topic,多个消费者从 Topic 消费消息。一个消息可以被多个消费者消费

两者区别

队列 实现了负载均衡,一条消息只能被一个消费者接收,当没有消费者可用时,这个消息会被保存直到有一个可用的消费者。

Topic 实现了发布和订阅,当你发布一个消息,所有订阅这个 topic 的服务都能得到这个消息,所以从 1 到 N个 订阅者都能得到一个消息的拷贝。发布订阅模式通过分组订阅实现负载均衡。

流行消息队列的消息模型比较

ActiveMQ 遵循了JMS 规范,实现了点到点和发布订阅模型。RabbitMQ 和 Kafka 没有遵循 JMS。

RabbitMQ

RabbitMQ 遵循了 AQMP 协议,该协议定义了消息路由规则和方式。生产者通过路由规则将消息发送到不同的队列,消费者根据队列名称消费消息。RabbitMQ 向消费者推送消息,订阅关系和消费状态保存在服务端。

RabbitMQ 多订阅支持,是将消息根据路由规则发送到多个队列,不同的消费组根据队列名称消费消息。支持内存队列和持久化队列,为推模型,订阅关系和消费信息由服务端维护,消息消费完之后立即删除,不保留历史消息,所以多订阅时,消息被多个拷贝。

Kafka

kafka 只支持消息持久化,消费端为拉模型,消费状态和订阅关系由客户端维护,消息消费完成后不会立即删除,会保留历史消息,因此支持多个消费者时,消息只会存储一份。

消费者组会消费同一个 topic 中的消息,每条消息只会被组内的一个消费者消费。即同一个消费组内的消费者消费不同的消息。

Pulsar

Apache Pulsar之什么是Apache Pulsar?

  • Exclusive subscription(点到点订阅):在任何给定时间都只能有一个消费者
  • Shared subscription(共享订阅):多个消费者可以附加到同一个订阅,每个消费者将接收到消息的一部分
  • Failover subscription(故障恢复订阅):允许多个消费者连接到一个主题,但在任何给定时间只有一个消费者将接收消息,其他消费者只有在当前接收消费者失败时才会开始接收消息。

 

Pulsar 的详细订阅模型,请查阅:Apache Pulsar之与Apache Kafka的异同——标准队列和流

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值