消息队列中间件

一、消息模型

点对点

消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。

 

发布/订阅

消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。

 

发布与订阅模式和观察者模式有以下不同:

  • 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,发布者与订阅者不知道对方的存在,它们之间通过频道进行通信。
  • 观察者模式是同步的,当事件触发时,主题会去调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,发布者向频道发送一个消息之后,就不需要关心订阅者何时去订阅这个消息。

 

参考:

二、使用场景

异步处理

发送者将消息发送给消息队列之后,不需要同步等待消息接收者处理完毕,而是立即返回进行其它操作。消息接收者从消息队列中订阅消息之后异步处理。

例如在注册流程中通常需要发送验证邮件来确保注册用户的身份合法,可以使用消息队列使发送验证邮件的操作异步处理,用户在填写完注册信息之后就可以完成注册,而将发送验证邮件这一消息发送到消息队列中。

只有在业务流程允许异步处理的情况下才能这么做,例如上面的注册流程中,如果要求用户对验证邮件进行点击之后才能完成注册的话,就不能再使用消息队列。

流量削锋

在高并发的场景下,如果短时间有大量的请求到达会压垮服务器。

可以将请求发送到消息队列中,服务器按照其处理能力从消息队列中订阅消息进行处理。

应用解耦

如果模块之间不直接进行调用,模块之间耦合度就会很低,那么修改一个模块或者新增一个模块对其它模块的影响会很小,从而实现可扩展性。

通过使用消息队列,一个模块只需要向消息队列中发送消息,其它模块可以选择性地从消息队列中订阅消息从而完成调用。

三、可靠性

发送端的可靠性

发送端完成操作后一定能将消息成功发送到消息队列中。

实现方法:

  • 在本地数据库建一张消息表,将消息数据与业务数据保存在同一数据库实例里,这样就可以利用本地数据库的事务机制。事务提交成功后,将消息表中的消息转移到消息队列中,若转移消息成功则删除消息表中的数据,否则继续重传。

接收端的可靠性

接收端能够从消息队列成功消费一次消息。

实现方法:

  • 保证接收端处理消息的业务逻辑具有幂等性:只要具有幂等性,那么消费多少次消息,最后处理的结果都是一样的。
  • 保证消息具有唯一编号,并使用一张日志表来记录已经消费的消息编号。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高并发消息队列中间件一种用于处理大量并发消息传递的软件系统。它提供了可靠的消息传递机制,以确保消息的可靠性和一致性。以下是两个常见的高并发消息队列中间件的介绍: 1. Kafka: Kafka是一个分布式流处理平台,也是一个高吞吐量的分布式发布订阅消息系统。它具有以下特点: - 支持高并发:Kafka能够处理大量的并发消息传递,可以同时处理大量的生产者和消费者。 - 高可靠性:Kafka使用分布式存储和复制机制,确保消息的可靠性和持久性。 - 高扩展性:Kafka可以通过添加更多的代理节点来扩展处理能力,以适应不断增长的消息负载。 - 高性能:Kafka使用磁盘存储消息,可以提供非常高的吞吐量和低延迟。 2. DDMQ(滴滴消息队列): DDMQ是滴滴出行开源的高并发消息队列中间件,它提供了低延迟、高并发、高可用、高可靠的消息服务。DDMQ具有以下特点: - 多种消息类型:DDMQ支持实时消息、延迟消息和事务消息等多种消息类型,以满足不同业务需求。 - 高可靠性:DDMQ使用分布式存储和复制机制,确保消息的可靠性和持久性。 - 高扩展性:DDMQ可以通过添加更多的代理节点来扩展处理能力,以适应不断增长的消息负载。 - 高性能:DDMQ使用高效的消息传递协议和优化的存储引擎,提供了低延迟和高吞吐量的消息传递能力。 这些高并发消息队列中间件可以帮助企业构建可靠、高效的消息传递系统,适用于各种高并发场景,如实时数据处理、日志收集、分布式事务等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值