动态消息“路由”模式?

时间:2018-08-22 10:58:07

标签: design-patterns microservices message-queue

我们正在使用微服务和AWS SQS构建用于消息传递的应用程序。

我们要求在“最终目的地”微服务中处理单个消息之前,必须先将多个微服务处理该消息。

例如:

  • 微服务A生成一条消息
  • 该消息必须由微服务B验证
  • 已验证的消息必须使用微服务C进行转换
  • 必须使用微服务D将转换后的消息应用于数据存储

是否有一种模式(在消息创建时)动态地规定消息队列中侦听器之间的消息流?

1 个答案:

答案 0 :(得分:2)

似乎SQS无法实现消息的选择性路由,如下面的链接所述

Finding certain messages in SQS

从SQS文档https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/SendReceiveMessages.java中可以看到,您无法添加属性来对消息进行分类,即SQS不是为用例设计的。

唯一可能的解决方案是针对不同类型的消息使用三个不同的队列,并使每个微服务侦听特定类型的消息,这是管道和过滤器设计模式的典型用例

另一方面,如果您考虑构建自己的动态路由队列,请参考此文档以实现本企业设计模式文档https://www.enterpriseintegrationpatterns.com/patterns/messaging/ContentBasedRouter.html

中讨论的基于内容的路由器。

希望有帮助!