异步生产和消费的设计概念
前面的示例都是采用BlockingConenction
的同步阻塞式生产和消费。同步阻塞式的模式效率很低,一般只用于规模很小的应用中。在大部分生产环境中还是使用异步模型来产生较高的处理性能。
Pika中提供了多种异步Connection以供使用,具体可见前面的列举。但是不管使用哪种异步Connection实现,其基本原理都是一致的:通过Connection提供的IO Loop来进行异步响应。
针对异步消费模型,一般都使用以下步骤来进行消息的处理。
- 【主动调用】 建立Connection,并绑定响应Connection建立事件、关闭事件的回调。
- 【主动调用】 启动Connection的IO循环(
ioloop
)。 - 【Connection建立事件回调】 打开Channel,并绑定响应Channel打开事件的回调。
- 【Channel打开事件回调】 声明Exchange,并绑定响应Channel关闭事件的回调与Exchange声明事件的回调。
- 【Exchange声明事件回调】 声明Queue,并绑定Queue声明事件的回调。
- 【Queue声明事件回调】 绑定Queue到Exchange,并绑定绑定事件的回调。
- 【绑定事件回调】 启动Channel的消费监听,并绑定消息接收处理回调。
- 【消息接收处理回调】 处理消息,并确认消息。
- 【主动调用】 关闭Channel的消费监听。
- 【主动调用】 关闭Connection。
- 【Connection关闭事件回调】 关闭Connection的IO循环。
异步生产模型与异步消费模型相似,但是如果不需要处理消息接收事件,则不必再声明Queue,并且需要将消息接收处理回调去除改为调用消息发送即可。IO循环的开启与关闭位置都是相同的,需要在相应的回调函数中启动和关闭。