小编典典

消息队列与 Web 服务?

all

在什么情况下,人们会喜欢通过消息队列而不是通过 Web 服务进行通信的应用程序(我只是指 XML、JSON 或 YAML 或任何通过 HTTP
的方式,而不是任何特定类型)?

我必须在本地网络上的两个应用程序之间交谈。一个是 Web
应用程序,必须在另一个应用程序上请求命令(在不同的硬件上运行)。这些请求是诸如创建用户、移动文件和创建目录之类的。在什么情况下我更喜欢 XML Web
服务(或直接的 TCP 或其他东西)而不是使用消息队列?

Web 应用程序是 Ruby on Rails,但我认为问题比这更广泛。


阅读 84

收藏
2022-05-07

共1个答案

小编典典

当您使用 Web 服务时,您有一个客户端和一个服务器:

  1. 如果服务器出现故障,客户端必须负责处理错误。
  2. 当服务器再次工作时,客户端负责重新发送它。
  3. 如果服务器对调用做出响应而客户端失败,则操作将丢失。
  4. 您没有争用,即:如果数百万客户端在一秒钟内调用一台服务器上的 Web 服务,您的服务器很可能会宕机。
  5. 您可以期待来自服务器的立即响应,但您也可以处理异步调用。

当您使用 RabbitMQ、Beanstalkd、ActiveMQ、IBM MQ Series、Tuxedo
之类的消息队列时,您会期望得到不同且更容错的结果:

  1. 如果服务器出现故障,队列会保留消息(可选,即使机器关闭)。
  2. 当服务器再次工作时,它会收到待处理的消息。
  3. 如果服务器对调用做出响应并且客户端失败,如果客户端没有确认响应,则消息将被保留。
  4. 您有争用,您可以决定服务器处理多少请求(改为称为工人)。
  5. 您不期望立即同步响应,但您可以实现/模拟同步调用。

Message Queues 具有更多功能,但这是一些经验法则,可以决定您是要自己处理错误情况还是将它们留给消息队列。

2022-05-07