您的当前位置: 重症肌无力 > 疾病常识

消息中间件,到底该如何选型

斗茶季一场只斗老丛的斗茶赛开始收样啦 http://www.wuyishanzx.com/wysrk/6262.html

当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等,而部分数据库如Redis、MySQL以及PhxSQL也可实现消息队列的功能。

消息队列概述

消息队列是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。

消息队列的特点

采用异步处理模式

消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列)上,消息接收者则订阅或是监听该通道。

一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出同步回应。整个过程都是异步的。

应用系统之间解耦合

主要体现在如下两点:

发送者和接受者不必了解对方、只需要确认消息。

发送者和接受者不必同时在线。

比如在线交易系统为了保证数据的最终一致,在支付系统处理完成后会把支付结果放到消息中间件里,通知订单系统修改订单支付状态。两个系统是通过消息中间件解耦的。

消息队列的传递服务模型

消息队列的传递服务模型如下图所示:

消息队列的的传输模式

点对点模型

点对点模型用于消息生产者和消息消费者之间点到点的通信。消息生产者将消息发送到由某个名字标识的特定消费者。

这个名字实际上对于消费服务中的一个队列(Queue),在消息传递给消费者之前它被存储在这个队列中。

队列消息可以放在内存中也可以持久化,以保证在消息服务出现故障时仍然能够传递消息。

传统的点对点消息中间件通常由消息队列服务、消息传递服务、消息队列和消息应用程序接口API组成。

其典型的结构如下图所示:

特点如下:

每个消息只用一个消费者。

发送者和接受者没有时间依赖。

接受者确认消息接受和处理成功。

示意图如下所示:

发布/订阅模型(Pub/Sub)

发布者/订阅者模型支持向一个特定的消息主题生产消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。

在这种模型下,发布者和订阅者彼此不知道对方,就好比是匿名公告板。这种模式被概括为:多个消费者可以获得消息,在发布者和订阅者之间存在时间依赖性。

发布者需要建立一个订阅(Subscription),以便消费者能够订阅。订阅者必须保持持续的活动状态并接收消息。

在这种情况下,在订阅者未连接时,发布的消息将在订阅者重新连接时重新发布,如下图所示:

特性如下:

每个消息可以有多个订阅者。

客户端只有订阅后才能接收到消息。

持久订阅和非持久订阅。

注意以下三点:

发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息。

持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线。

非持久订阅:订阅者为了接受消息,必须一直在线。当只有一个订阅者时约等于点对点模式。

消息队列应用场景

当你需要使用消息队列时,首先需要考虑它的必要性。可以使用消息队列的场景有很多,最常用的几种,是做应用程序松耦合、异步处理模式、发布与订阅、最终一致性、错峰流控和日志缓冲等。

反之,如果需要强一致性,


转载请注明:http://www.fdhhc.com/jbcs/12158.html



  • 上一篇文章:
  • 下一篇文章: 没有了
  •