消息中间件详解

消息中间件的主要作用
  1. 异步 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。
  2. 解耦 生产者系统将消息写入消息队列,消费系统自己从消息队列中获取消息,使得2个系统不再耦合。
  3. 削峰 有时一个系统的某个接口会有很大的流量,这种会给系统造成很大压力,服务器利用率则会偏高,而利用消息中间件,可以把高峰时的流量冲击放进消息队列中,消费者再慢慢消费。
消息队列的缺点

系统可用性降低 我们需要维护MQ,MQ也可能挂掉,系统的可用性是不是就降低了

系统的复杂度提高 加入一个MQ之后,需要考虑消息重复消费、消息丢失、甚至消息顺序性等问题

消息队列需要关注的几个点

死信队列 因为消息可能失败比如:消息被拒绝、TTL过期、队列达到最大长度等,所以为了保证消息都被消费,我们需要设计死信队列,我们系统可以设置一个线程,监控系统是否恢复正常,如果正常,就从死信队列再取数据消费

保证消息的可靠性 可分为生产者到消息队列,消息队列到消费者,生产者到消息队列可靠性可以发送数据前插入数据库,插入成功则标记。不过这种比较少用,影响效率。消息队列到消费者之间,可以对消息进行确认,直到消息被确认后,消息才会在队列里被删除

高可用 很多消息中间件都有对应的集群模式来实现高可用,比如RabbitMQ的高可用一般的做法都是开启镜像集群模式

常见消息队列的对比

RabbitMq

适用范围:

  1. 您的应用需要使用 AMQP 0-9-1、STOMP、MQTT、AMQP 1.0 等现有协议的任意组合。
  2. 您需要确保消息交付成熟而且具有明确的一致性保障。
  3. 您的应用需要各种点-点、请求-应答和发布-订阅等通信模式。
  4. 到消费者的复杂路由,将多个服务或应用与重要的路由逻辑集成。
  5. 当与现有的 IT 基础架构集成非常重要时,RabbitMQ 非常合适。

kafka

适用范围:

  1. 从 A 到 B 的流传输,无需复杂的路由,最大吞吐量可达每秒 100k 以上,按分区顺序至少交付一次。
  2. 当您的应用需要访问数据流历史时,按分区顺序至少交付一次。Kafka 是一个持久性消息存储,客户端可以按需“重演”事件流,这与更为传统的消息代理不同;在更为传统的消息代理中,一旦消息完成交付,便会从队列中删除。
  3. 当您拥有能够可靠地跟踪日志偏移的智能客户端时。
  4. 如果您的应用需要一个“无限”队列。
参考

https://mp.weixin.qq.com/s/t0LOz_m3NH5y69VgSh7ayw

https://mp.weixin.qq.com/s/c-AbgNKKI2WEeMFyk4ZNYQ

https://mp.weixin.qq.com/s/l0AL89M0xPbWMFj6U7yYZw

欢迎关注公众号蜜蜂技术巢了解更多知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久梦歌行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值