消息发布和订阅服务Amazon SNS提供先进先出主题功能

AWS用户现在可以在所有商业地区,使用SNS FIFO(First-In-First-Out)主题,让用户也可以在Pub/Sub(Publish/Subscribe)消息服务中,以严谨的顺序处理事件,并且排除重复的消息。

AWS提到,在设计分布式软件架构的时候,定义服务交换消息的方式,是一件重要的工作,因为在异步通信用例解耦组件,就能简化扩展、减少更新带来的影响,并且让发布新功能更轻松,而异步服务到服务(Service-to-Service)的通信,最常使用的形式就是消息队列以及Pub/Sub消息。

消息队列是将消息存储在队列中,直到消息消费方进行处理或是删除操作,在AWS中,用户可以使用Amazon Simple Queue Service(SQS)托管消息队列服务;另一种方式则是使用Pub/Sub消息,运行方式则是将消息发布到主题中,并传递给所有订阅该主题的消息订阅方,AWS用户可以使用Amazon Simple Notification Service(SNS)发布和订阅消息,消息订阅者也能够设置过滤政策,忽略不关心的消息。

在SQS中,用户可以使用FIFO队列,保留消息的发送和接受顺序,并避免消息被多次处理,而现在AWS用户也可在SNS用到FIFO主题功能,FIFO主题与FIFO队列类似,管理排序和删除重复的消息。

当消息发布到FIFO主题时,用户能够利用消息群组ID来管理消息群组,每个消息群组ID都会按照消息抵达的顺序发送和传递,目前FIFO主题和队列的消息群组数量没有限制,只是用户需要事先声明消息群组ID,当消息之间没有逻辑上的区别,就可以简单地使用同一组消息群组ID,仅使用单一有序消息群组。

由于分布式系统和客户端应用程序,有时候会产生重复的消息,SNS可以利用SHA-256散列值,以消息主体产生去重复消息ID,在5分钟内,系统不会传递具有相同去重复消息ID的消息,当用户在FIFO队列订阅FIFO主题,则该ID会被传递到队列,避免接收重复的消息。

用户可以结合FIFO主题和队列一起使用,以简化应用程序的有序事件的实例,也能够用来去除无法接受的重复消息。FIFO队列可以使用FIFO主题中的消息过滤功能,选择性接受消息子集,而非接收每个发布到该主题的消息。