如何在后端组件 interactions/communication 使用消息传递(例如 RabbitMQ)与 Web 服务之间做出决定?
How to decide between using messaging (e.g. RabbitMQ) versus a web service for backend component interactions/communication?
在开发后端组件时,我需要决定这些组件如何交互和相互通信。特别是,我需要决定使用(RESTful,微)Web 服务与消息代理(例如 RabbitMQ)哪个更好。是否有特定标准可帮助决定是对每个组件使用 Web 服务还是使用消息传递?
Web 服务器和消息代理有自己的用例。用于托管 Web 服务的 Web 服务器和消息代理用于在两点之间交换消息。如果您需要部署 Web 服务,则必须使用 Web 服务器,您可以在其中处理该消息并发回响应。现在让我们认为您需要在任何两个节点之间、两个服务器之间、客户端与服务器之间或服务器与客户端之间具有 publisher/subscriber 模式 or/and 可靠的消息传递,这就是消息代理发挥作用的地方您可以在两个节点中间使用消息代理来实现它。使用消息代理可以为您提供可靠性,但您必须以性能为代价。因此,尽管有多个选项可用,但您应该使用的组件取决于您的用例。
Eranda 在他的回答中涵盖了其中的一些内容,但我认为三个关键驱动因素是:
- 您正在为请求-响应类型的交互建模吗?
- 你的交互可以是异步的吗?
- 信息的发送者需要对接收者有多少了解?
可以使用异步消息传递基础结构进行请求-响应类型的交互,但它会显着增加复杂性,因此通常请求-响应类型的交互(即发送方是否需要从接收方返回一些数据)更多很容易建模为 RPC/REST 交互。
如果您的交互可以是异步的,那么可以使用 REST 交互来实现它,但如果您使用即发即弃的消息传递类型交互,它可能会更好地扩展。
如果信息提供者不关心谁在使用信息,则异步消息传递交互也将更为合适。信息提供者可以发布信息,并且该信息的新消费者可以在以后添加到系统中而无需更改提供者。
在开发后端组件时,我需要决定这些组件如何交互和相互通信。特别是,我需要决定使用(RESTful,微)Web 服务与消息代理(例如 RabbitMQ)哪个更好。是否有特定标准可帮助决定是对每个组件使用 Web 服务还是使用消息传递?
Web 服务器和消息代理有自己的用例。用于托管 Web 服务的 Web 服务器和消息代理用于在两点之间交换消息。如果您需要部署 Web 服务,则必须使用 Web 服务器,您可以在其中处理该消息并发回响应。现在让我们认为您需要在任何两个节点之间、两个服务器之间、客户端与服务器之间或服务器与客户端之间具有 publisher/subscriber 模式 or/and 可靠的消息传递,这就是消息代理发挥作用的地方您可以在两个节点中间使用消息代理来实现它。使用消息代理可以为您提供可靠性,但您必须以性能为代价。因此,尽管有多个选项可用,但您应该使用的组件取决于您的用例。
Eranda 在他的回答中涵盖了其中的一些内容,但我认为三个关键驱动因素是:
- 您正在为请求-响应类型的交互建模吗?
- 你的交互可以是异步的吗?
- 信息的发送者需要对接收者有多少了解?
可以使用异步消息传递基础结构进行请求-响应类型的交互,但它会显着增加复杂性,因此通常请求-响应类型的交互(即发送方是否需要从接收方返回一些数据)更多很容易建模为 RPC/REST 交互。
如果您的交互可以是异步的,那么可以使用 REST 交互来实现它,但如果您使用即发即弃的消息传递类型交互,它可能会更好地扩展。
如果信息提供者不关心谁在使用信息,则异步消息传递交互也将更为合适。信息提供者可以发布信息,并且该信息的新消费者可以在以后添加到系统中而无需更改提供者。