Design patterns “动态消息”;“路由”;图案

Design patterns “动态消息”;“路由”;图案,design-patterns,microservices,message-queue,Design Patterns,Microservices,Message Queue,我们正在使用微服务和AWS SQS构建一个用于消息传递的应用程序 我们要求在“最终目的地”微服务处理单个消息之前,由多个微服务处理 例如: 微服务A生成一条消息 该消息必须由microservice B验证 必须使用microservice C转换已验证的消息 转换后的消息必须使用microservice D应用于数据存储 是否有一种模式可以动态(在消息创建时)规定消息队列上侦听器之间的消息流?如下链接所述,使用SQS似乎无法实现消息的选择性路由 正如您从SQS文档中看到的,您无法添加属性

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

我们要求在“最终目的地”微服务处理单个消息之前,由多个微服务处理

例如:

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

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

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

正如您从SQS文档中看到的,您无法添加属性来对消息进行分类,即SQS不是针对用例而设计的

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

另一方面,如果您考虑建立自己的动态路由队列,请参考此文档以实现基于该企业设计模式文档

中讨论的基于内容的路由器。
希望有帮助

也许这是一篇你觉得有趣的文章:你的答案正好回答了我的问题,谢谢。您如何看待使用“dispatcher”微服务,它侦听通用队列上的消息,检查消息内容,然后将消息中继到与相应处理程序微服务关联的队列。然后有一个单独的“响应”队列,发起者将监听响应消息?@JoelStevick:您建议的设计与我建议的非常接近,下面的管道和过滤器架构模式使用单独的SQS队列-service1作用于msg->将msg排队到SQS Q1,service2侦听SQS Q1并对其执行操作,然后将其推送到SQS Q2,service3侦听SQS Q3并对其执行操作。希望是clearSo,如果service3希望将响应消息发送回service1,将如何实现?我认为一个合理的方法是建立一个“响应”队列,service1将监听该队列,以获取来自任何其他服务的完成结果;这会是一种反模式吗?从答案中,我能够确定我正在寻找的确切模式,它被称为“”