简短版:如何防止在远程过程调用情况下阻塞 Pika?
长版:
Pika 示例都没有演示我的用例。
我有一个 Tornado 服务器,它通过 AMQP(RabbitMQ、Pika)与其他进程/机器通信。这些其他进程的定义不是很明确,但它们在大多数情况下会返回数据(请参阅RabbitMQ 网站上的 RPC 示例)。有时,一个进程可能需要花费极长的时间来处理大量信息,但它不应该完全阻止较小的请求被该进程处理。或者,远程服务器可能因为发送了 Web 请求而阻塞。把它想象成一个 Web 服务器,但是使用 AMQP 而不是 HTTP。
由于 Pika 文档声称它不是线程安全的,因此我无法将连接传递给多个线程(或进程,就此而言)。我想要做的是启动一个新进程,并将一个套接字事件(用于该程序的管道)添加到 Pika IOLoop,就像我可以使用 Tornado 一样。Pika IOLoop 与 Tornado IOLoop 有很大不同,它似乎不支持添加多个处理程序;它似乎在一个套接字上使用一个“轮询器”进行操作。
我想避免这个包需要 Tornado 包,因为我只会使用 IOLoop。这不是不可能的,但我想看看我的其他选择是什么,或者是否可以通过以某种方式连接多个 Pika IOLoops/Pollers 来解决我的问题。RabbitMQ 的文档说,工人通常可以通过增加更多来“扩大规模”。我想避免为传入的每个请求创建连接(如果它们快速传入)。