Exchange与Queue

对于AMQP协议来说,Exchange(网关)和Queue(队列)是其进行消息传递的基本元件。

Exchange在Kombu中通过kombu.Exchange类来创建。创建时常用以下参数来定制Exchange。

  • name,Exchange的名称。
  • type,Exchange的类型,可选directtopicfanoutheaders
  • channel,Exchange绑定到的通道,可以通过Connection类的.channel()方法获取。
  • durable,指示当消息队列重启后这个Exchange是否还继续存在,布尔型值。
  • auto_delete,指示当所有依赖这个Exchange的Queue都删除后是否自动删除Exchange,布尔型值,默认为Flase
  • delivery_mode,消息传递模式,字符串型,可取transient(即时)或者persistent(持久化)。

Exchange类实例在创建后,需要调用.declare()方法来在消息队列中创建Exchange。Exchange在不再需要时可以使用.delete()方法删除。Exchange类实例还可以通过使用.bind_to(exchange='', routing_key='')来绑定到另一个Exchange来完成消息中转。

Queue则是需要绑定到Exchange才能够接收到消息的。Queue在Kombu中可以通过kombu.Queue类来创建。创建时常用以下参数来定制Queue。

  • name,Queue的名称。
  • exchange,需要绑定到的Exchange名称或者Exchange类实例。
  • routing_key,绑定键,可参考前面Pika一章中的叙述。
  • channel,绑定到的Channel。
  • durable,指示在消息队列重启之后Queue是否还继续存在。
  • exclusive,指示Queue中的消息是否只能被当前连接消费。
  • auto_delete,指示当没有消费者连接到这条Queue时是否自动删除Queue。
  • expires,指示Queue从空闲到自动删除的等待时间。
  • message_ttl,消息的存活时间。
  • max_length,Queue持有消息的最大数量。
  • max_priority,Queue的最大优先级。
  • on_declared,当Queue完成创建后的回调。

如果Queue在创建的时候没有指定Exchange,那么可以使用.bind_to(exchange='', routing_key='')来绑定到Exchange。