在开发后端组件时,我需要决定这些组件如何相互交互和通信。特别是,我需要决定使用(RESTful,微)Web 服务与消息代理(例如 RabbitMQ)是否更好。是否有某些标准可以帮助决定为每个组件使用 Web 服务还是使用消息传递?
2 回答
Eranda 在他的回答中涵盖了其中的一些内容,但我认为三个关键驱动因素是:
- 您是否在为请求-响应类型的交互建模?
- 你的交互可以是异步的吗?
- 信息的发送者需要对接收者有多少了解?
可以使用异步消息传递基础结构进行请求-响应类型的交互,但它显着增加了复杂性,因此通常请求-响应类型的交互(即发送者是否需要从接收者返回的一些数据)更容易建模为 RPC/ REST 交互。
如果您的交互可以是异步的,那么可以使用 REST 交互来实现这一点,但如果您使用 fire and forget 消息类型交互,它可能会更好地扩展。
如果信息的提供者不关心谁在使用信息,那么异步消息交互也将更合适。信息提供者可能正在发布信息,并且该信息的新消费者可以稍后添加到系统中,而无需更改提供者。
Web server and message broker have their own use cases. Web server used to host web services and the message broker are use to exchange messages between two points. If you need to deploy a web service then you have to use a web server, where you can process that message and send back a response. Now let's think that you need to have publisher/subscriber pattern or/and reliable messaging between any two nodes, between two servers, between client and server, or server and client, that's where the message broker comes into the picture where you can use a message broker in the middle of two nodes to achieve it. Using message broker gives you the reliability but you have to pay it with the performance. So the components you should use depends on your use case though there are multiple options available.