百谷云计算
华为云注册
当前位置:
分布式消息服务DMS
来源: | 作者:百谷云计算 | 发布时间: 2019-07-30 | 3594 次浏览 | 分享到:

分布式消息服务(Distributed Message Service,简称DMS)是一项基于高可用分布式集群技术的消息中间件服务,提供了可靠且可扩展的托管消息队列,用于收发消息和存储消息。

使用DMS,您可以创建消息队列,将消息队列作为一个传输消息的中转站,存储应用程序不同组件间传递的消息,从而做到在应用程序的不同组件之间传输消息时,不要求各个组件同时处于可用状态。

DMS生产和消费消息的示意图如图1所示。

图1 DMS的消息生产和消费的示意图
表1 说明

步骤

说明

1

生产者将消息M发送到队列中。

消息M在队列中冗余分布,存在多个副本。

2

消费者从队列中消费消息,获取到消息M。

在消费者消费消息M期间,消息M仍然停留在队列中,但消息M从被消费开始的30秒内不能被该消费组再次消费,若在这30秒内没有被消费者确认消费完成,则DMS认为消息M未消费成功,将可以被继续消费。

3

消费者确认消息M消费完成,消息M将不能被该消费者所在消费组消费。

消息M仍然保持在队列中,并且可以被其它消费组消费,消息在队列中的保留时间为至少72小时(除非队列被删除),72小时后将会被删除。

说明:

消费确认的动作只需要在使用API的时候做,在使用Console的时候不需要,因为在Console中的消费动作已经包含了确认,消费后会自动确认。

DMS是分布式的队列系统,队列中的消息分布存储,且每条消息存储多个副本,以实现高可用性,如图2所示。

图2 消息队列

消息队列具有如下属性:

  • 消息顺序

    普通队列支持“分区有序”和“全局有序”两种模式,Kafka队列均为分区有序。

    分区有序的队列通过分布式处理,支持更高的并发,但由于队列的分布式特性,DMS无法保证能够以接收消息的精确顺序进行消费。如果用户要求保持顺序,建议在每条消息中放置排序信息,以便在收到消息时对消息重新排序。

    全局有序的队列对消息消费遵循先入先出规则(FIFO),适用于对消费顺序要求较高的场景。

  • 至少一次传递

    在极少数情况下,当用户接收或删除消息时,存储消息副本的服务器之一可能不可用。如果出现这种情况,则该不可用服务器上的消息副本将不会被删除,并且在接收消息时可能会再次获得该消息副本。

    这被称为“至少一次传递”,因此,用户的应用程序应该设计为幂等的应用程序(即,如果应用程序多次处理同一条消息,与单次成功处理该条消息的效果等价)。