【问题标题】:Split REST API and message broker consumer拆分 REST API 和消息代理使用者
【发布时间】:2021-11-25 16:27:39
【问题描述】:

我正在设计的架构应该由以下组件组成:REST API(spring boot 或 quarkus)、消息代理(activemq 或 rabbitmq)和数据库(mongodb 或 postgresql)。此架构应处理以下提到的与审计相关的场景:

  1. 调用 REST API 来存储审计跟踪:在这种情况下,REST API 将接收到的消息传输到消息代理,作为 REST API 的一部分的消费者使用消息并将其存储到数据库中
  2. 调用 REST API 来检索审计跟踪:在这种情况下,REST API 进入数据库以提取所需数据

目前,如果我应该将消费者和 REST API 拆分为不同的组件,我有点困惑。实际上,如果我这样做,我会有哪些优点和缺点,如果我不这样做,我会有哪些优点和缺点。

对我而言,如果我将上面的组件拆分,可扩展性可能是其中一个优点,但很难生成其他东西。

请建议一些方向,以便更好地理解这一点

【问题讨论】:

  • 为什么不直接使用经纪人? activemq.apache.org/rest
  • @codebrane 我不确定你的问题是否正确,你能解释一下只使用代理的目的吗?
  • 不是REST服务向代理发送消息,而是让客户端直接发送到代理队列的REST端点
  • @codebrane 我明白了你的想法,谢谢你的建议,但是在消息代理之上拥有 spring boot rest 服务的想法是有可能在消息到达代理之前验证消息。另外,就我的问题而言,我想验证是否需要拆分 Spring Boot Rest 和 Consumer,实际上它与消息代理无关

标签: database spring-boot rest microservices messagebroker


【解决方案1】:

关于拆分可能性和缩放:

  1. 两个 API 都进入同一个数据库,它们属于同一个域。这就是为什么我会将它们放在同一个服务下 - 使用来自不同组件的同一个数据库是一种微服务反模式。
  2. 如果您在容器化环境中运行此服务并且可以选择动态扩展(向上和向下),那么这可能是一个不错的选择。
  3. 另一种方法是使用 CQRS 模式来创建可以不同扩展的读写分离,但请注意,这是更复杂的解决方案并且最终是一致的。

【讨论】: