web-services - 如何决定使用消息传递(例如 RabbitMQ)还是使用 Web 服务进行后端组件交互/通信?

标签 web-services rest messaging spring-rabbit microservices

在开发后端组件时,我需要决定这些组件将如何交互和相互通信。特别是,我需要决定使用(RESTful、微)Web 服务与消息代理(例如 RabbitMQ)是否更好。是否有某些标准可以帮助决定对每个组件使用 Web 服务还是使用消息传递?

最佳答案

Eranda 在他的回答中涵盖了其中的一些内容,但我认为其中三个关键驱动因素是:

  • 您正在建模请求-响应类型的交互吗?
  • 你的交互可以异步吗?
  • 信息的发送者需要对接收者有多少了解?

  • 可以使用异步消息传递基础结构进行请求-响应类型的交互,但它显着增加了复杂性,因此通常请求-响应类型的交互(即发送方是否需要从接收方返回一些数据)更容易建模为 RPC/REST 交互。

    如果您的交互可以是异步的,那么可以使用 REST 交互来实现这一点,但如果您使用即发即忘的消息类型交互,它可能会更好地扩展。

    如果信息的提供者不关心谁在消费信息,那么异步消息交互也将更加合适。信息提供者可以发布信息,而该信息的新消费者可以稍后添加到系统中,而无需更改提供者。

    关于web-services - 如何决定使用消息传递(例如 RabbitMQ)还是使用 Web 服务进行后端组件交互/通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29825744/

    相关文章:

    web-services - 最佳/最全面的股票/财务数据 API

    sql - 在 "Status"时间后动态更新 "X"列

    java - 通过 JQuery 调用外部域上的 RESTful 服务

    java - JMS 非 MDB 客户端

    windows - 更改 cookie 文件后 RabbitMQ 节点身份验证失败

    java - 可靠的 FIFO 消息传递 Java

    java - 升级到 2.2.10 后,CXF Web 服务将无法运行

    java - 使用 apache Camel 调用第三方 Web 服务

    c# - 在 c# webapi 中创建超媒体的正确方法

    java - 如何诊断ReSTLet 2.3.5中的 "org.reSTLet.data.Parameter cannot be cast to org.reSTLet.data.Header"错误?