Search code examples
pythonrabbitmqrpcpika

How to write an async RPC client with Pika?


I'm trying to write an async RPC client using pika, I'm basing my code on the following example,

http://pika.readthedocs.io/en/latest/examples/asynchronous_publisher_example.html

The problem is that according to pika's RPC blocking example, a RPC call does not use an exchange, however whenever I try to open an exchange using,

self._channel.exchange_declare(self.on_exchange_declareok,
                                   '',
                                   self.EXCHANGE_TYPE)

I get disconnected. Also, if I try to skip the exchange_declare function and jump right into declaring the queue, I get the same result. What is the proper way to approach this?


Solution

  • You can implement an Async RPC client by adding a background thread that handles the RabbitMQ connection. I have a working example for pika and flask available here.

    You also have an a little more elaborate example that is based on my own library available here.

    These are obviously still based on the Blocking Connection, but at least they offer an asynchronous solution.