本文参考以下链接摘录翻译:
https://www.rabbitmq.com/tutorials/amqp-concepts
绑定 (Bindings)
绑定是交换机用来将消息路由到队列的规则。为了让一个交换机E将消息路由到队列Q,Q必须绑定到E。绑定可以有一个可选属性routing key,有一些类型的交换机会用到该属性。routing key用来从发布到交换机的消息中选出一些消息路由到绑定的队列。换句话说,routing key像一个过滤器。
打个比方:
- 队列像你在纽约市的目的地
- 交换机像JFK机场
- 绑定就是从JFK到你的目的地的路线。可能有0或多条路线到达目的地。
有这一层间接解决了不可能或很难实现的路由场景,如直接发布消息到队列,这也消除了部分应用程序员不得不做的重复工作。
如果一条消息不能被路由到任何队列(例如,比如这条消息被发布到的交换机没有适合它的绑定),它要么被扔掉或者返回给发布者,这由发布者设置的属性决定。
消费者 (Consumers)
消息存储在队列里是没用的,除非应用能消费它们。在AMQP 0-9-1模型,应用有2种方式消费消息:
- 订阅(Subscribe)让消息推送给消费者("push API"),这是推荐的选项
- 拉取("pull API"): 这种方式特别低效率,在绝大多数情形,应该避免使用
使用“push API”时,应用必须标识它想从某个特定的队列消费消息。当应用这样做时,我们说应用注册了一个消费者,或者订阅了一个队列。一个队列可以有多个消费者,应用也可以注册为一个排他的消费者(当这个应用消费消息时,其他消费者就不能从该队列消费消息)。
每个消费者(订阅)有一个标识符叫做消费者标签。这个标签可用来取消消息订阅。消费者标签就是字符串。
待续。。。