异步生产和消费的设计概念

前面的示例都是采用BlockingConenction的同步阻塞式生产和消费。同步阻塞式的模式效率很低,一般只用于规模很小的应用中。在大部分生产环境中还是使用异步模型来产生较高的处理性能。

Pika中提供了多种异步Connection以供使用,具体可见前面的列举。但是不管使用哪种异步Connection实现,其基本原理都是一致的:通过Connection提供的IO Loop来进行异步响应。

针对异步消费模型,一般都使用以下步骤来进行消息的处理。

  1. 【主动调用】 建立Connection,并绑定响应Connection建立事件、关闭事件的回调。
  2. 【主动调用】 启动Connection的IO循环(ioloop)。
  3. 【Connection建立事件回调】 打开Channel,并绑定响应Channel打开事件的回调。
  4. 【Channel打开事件回调】 声明Exchange,并绑定响应Channel关闭事件的回调与Exchange声明事件的回调。
  5. 【Exchange声明事件回调】 声明Queue,并绑定Queue声明事件的回调。
  6. 【Queue声明事件回调】 绑定Queue到Exchange,并绑定绑定事件的回调。
  7. 【绑定事件回调】 启动Channel的消费监听,并绑定消息接收处理回调。
  8. 【消息接收处理回调】 处理消息,并确认消息。
  9. 【主动调用】 关闭Channel的消费监听。
  10. 【主动调用】 关闭Connection。
  11. 【Connection关闭事件回调】 关闭Connection的IO循环。

异步生产模型与异步消费模型相似,但是如果不需要处理消息接收事件,则不必再声明Queue,并且需要将消息接收处理回调去除改为调用消息发送即可。IO循环的开启与关闭位置都是相同的,需要在相应的回调函数中启动和关闭。