Rabbit MQ消息队列原理(5)

3,对于高可用集群部署

基于Docker安装HAproxy负载+keepalived高可用


Rabbit MQ消息队列原理(5)


1,我们规划了两个内存节点,一个磁盘节点。所有的节点之间通过镜像队列的方式同步数据。内存节点用来给应用访问,磁盘节点用来持久化数据。


Rabbit MQ消息队列原理(5)


十,如何设计一个MQ消息队列



消息队列整体设计思路


主要是设计一个整体的消息被消费的数据流。


这里会涉及到:消息生产Producer、Broker(消息服务端)、消息消费者Consumer。


Rabbit MQ消息队列原理(5)


1.Producer(消息生产者):发送消息到Broker。


2.Broker(服务端):Broker这个概念主要来自于Apache的ActiveMQ,特指消息队列的服务端。


主要功能就是:把消息从发送端传送到接收端,这里会涉及到消息的存储、消息通讯机制等。


3.Consumer(消息消费者):从消息队列接收消息,consumer回复消费确认。


Broker(消息队列服务端)设计重点

1)消息的转储:在更合适的时间点投递,或者通过一系列手段辅助消息最终能送达消费机。


2)规范一种范式和通用的模式,以满足解耦、最终一致性、错峰等需求。


3)其实简单理解就是一个消息转发器,把一次RPC做成两次RPC,发送者把消息投递到broker,broker再将消息转发一手到接收端。


总结起来就是两次RPC加一次转储,如果要做消费确认,则是三次RPC。


为了实现上述消息队列的基础功能:


1)消息的传输

2)存储

3)消费


就需要涉及到如下三个方面的设计:


1)通信协议

2)存储选择

3)消费关系维护


通讯协议

消息Message:既是信息的载体,消息发送者需要知道如何构造消息,消息接收者需要知道如何解析消息,它们需要按照一种统一的格式描述消息,这种统一的格式称之为消息协议。


传统的通信协议标准有XMPP和AMQP协议等,现在更多的消息队列从性能的角度出发使用自己设计实现的通信协议。

1.JMS


JMS(Java MessageService)实际上是指JMS API。JMS是由Sun公司早期提出的消息标准,旨在为java应用提供统一的消息操作,包括创建消息、发送消息、接收消息等。


JMS提供了两种消息模型:

1)点对点

2)以及publish-subscribe(发布订阅)模型。

当采用点对点模型时,消息将发送到一个队列,该队列的消息只能被一个消费者消费。


而采用发布订阅模型时,消息可以被多个消费者消费。

在发布订阅模型中,生产者和消费者完全独立,不需要感知对方的存在。


2.AMQP


AMQP是 Advanced Message Queuing Protocol,即高级消息队列协议。


AMQP不是一个具体的消息队列实现,而 是一个标准化的消息中间件协议。


目标是让不同语言,不同系统的应用互相通信,并提供一个简单统一的模型和编程接口。 目前主流的ActiveMQ和RabbitMQ都支持AMQP协议。


AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。


JMS和AMQP比较

JMS: 只允许基于JAVA实现的消息平台的之间进行通信


AMQP: AMQP允许多种技术同时进行协议通信


3.Kafka的通信协议


Kafka的Producer、Broker和Consumer之间采用的是一套自行设计的基于TCP层的协议。Kafka的这套协议完全是为了Kafka自身的业务需求而定制的。


Rabbit MQ消息队列原理(5)

上一篇:Spring Cloud Eureka


下一篇:Rabbit MQ消息队列原理(4)