如何在 REST 客户端和 (Python) REST 服务器之间插入 RabbitMQ?
How to interpose RabbitMQ between REST client and (Python) REST server?
如果我开发一个托管在 Apache 中的 REST 服务和一个为 GET、PUT、DELETE、PATCH 提供服务的 Python 插件;并且此服务由 Angular 客户端(或其他 REST 交互浏览器技术)使用。那么如何使用 RabbitMQ (AMQP) 使其可扩展?
潜在解决方案 #1
- 多个 Apache 仍然面对浏览器的 HTTP 调用。
- 每个 Apache 实例都使用一个 AMQP 插件,然后将消息发布到队列
- Python 微服务监控队列并拉取消息,服务它并 return 响应
- 响应传回 Apache 插件,Apache 反过来生成 HTTP 响应
这是否意味着 Python 微服务不再有任何 HTTP 服务器代码。这将大大改变该组件。也许最好预先决定是否要使用此模式,因为删除任何 HTTP 服务器代码似乎是一项任务。
其他可能的解决方案?我真的很困惑我们应该如何采用经典的 REST 服务器组件并将其升级为可扩展 RabbitMQ/AMQP 且中断最少。
我建议将 wsgi 切换为 asgi(nginx 可以提供帮助),我不确定为什么您认为 rabbitmq 是您问题的解决方案,因为您描述的任何问题似乎都无法通过使用此方法解决。
据我所知,asgi 不受 apache 的支持,但它允许服务器继续工作,并且在它工作的同时它可以继续为进来的新请求提供服务。(粗略的简化)
如果出于某种原因你真的想使用 job worker(rabbitmq 等),那么我建议向用户返回一个 "token"(实际上只是 job_id),然后他们可以调用使用该令牌,它将报告当前作业状态或结果
如果我开发一个托管在 Apache 中的 REST 服务和一个为 GET、PUT、DELETE、PATCH 提供服务的 Python 插件;并且此服务由 Angular 客户端(或其他 REST 交互浏览器技术)使用。那么如何使用 RabbitMQ (AMQP) 使其可扩展?
潜在解决方案 #1
- 多个 Apache 仍然面对浏览器的 HTTP 调用。
- 每个 Apache 实例都使用一个 AMQP 插件,然后将消息发布到队列
- Python 微服务监控队列并拉取消息,服务它并 return 响应
- 响应传回 Apache 插件,Apache 反过来生成 HTTP 响应
这是否意味着 Python 微服务不再有任何 HTTP 服务器代码。这将大大改变该组件。也许最好预先决定是否要使用此模式,因为删除任何 HTTP 服务器代码似乎是一项任务。
其他可能的解决方案?我真的很困惑我们应该如何采用经典的 REST 服务器组件并将其升级为可扩展 RabbitMQ/AMQP 且中断最少。
我建议将 wsgi 切换为 asgi(nginx 可以提供帮助),我不确定为什么您认为 rabbitmq 是您问题的解决方案,因为您描述的任何问题似乎都无法通过使用此方法解决。
据我所知,asgi 不受 apache 的支持,但它允许服务器继续工作,并且在它工作的同时它可以继续为进来的新请求提供服务。(粗略的简化)
如果出于某种原因你真的想使用 job worker(rabbitmq 等),那么我建议向用户返回一个 "token"(实际上只是 job_id),然后他们可以调用使用该令牌,它将报告当前作业状态或结果