应用消息队列可以对系统进行解耦,流量削峰,在分布式系统设计中,消息队列是重要的组件之一。

在开发中应用过ActiveMQ,kafka等mq,不过对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现特别重要,

比如对一致性等实现的关注,可以帮助我们在开发中避免踩坑,规避问题的出现。这篇文章简单探讨下当设计和实现一个消息队列时,我们需要关心哪些地方。

 

消息队列功能和特性

一个传统意义上的消息队列,需要支持消息的发送,接受和消息暂存的功能。

在实际应用中,对消息队列的要求远不止于此,在不同的业务场景中,需要消息队列提供如顺序消息,消息可靠性,消息持久化等需求。

 

1.即时通信和消息队列

从消息能否会被即时接受和处理的角度,可以把消息传递的方式分为两种。

一种是即时消息通讯,也就是说消息从发送者一端发出后立即就可以达到接收者一端;

另一种方式称为延迟消息通讯,即消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端。

延迟消息通讯的容器实现就是消息队列。

电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

2.消息队列基础功能

消息队列需要支持消息的发送,消息暂存,和消息的异步消费,

3.消息队列需要支持的特性

除了基本功能以外,消息队列在某些特殊的场景还需要支持事务,消息重试等功能。

  • 消息的顺序

  • 投递可靠性保证

  • 消息持久化

  • 支持不同消息模型

  • 多实例集群功能

  • 分布式环境下的负载均衡

 

消息队列的基础设计

为了实现消息队列的基础功能,即消息的传输,存储和消费,

需要从以下几个维度去进行设计:

  • 通信协议

  • 存储选择

  • 消费关系维护

1.通信协议

消息既是信息的载体,消息发送者需要知道如何构造消息,消息接收者需要知道如何解析消息,它们需要按照一种统一的格式描

网友评论