写在前面
RabbitMQ遵循AMQP 0-9-1协议
AMQP 0-9-1协议简介
消息发布到交换站,这通常被比作邮局或邮箱。然后交换器使用称为绑定的规则将消息副本分发到队列。然后,AMQP代理将消息传递给订阅队列的消费者,或者根据需要从队列中获取消息。
发布消息时,发布者可以指定各种消息属性(消息元数据)。这些元数据中的一些可能由代理使用,但是,其他部分对代理完全不透明,仅供接收消息的应用程序使用。
网络是不可靠的,应用程序可能无法处理消息,因此 AMQP 模型有消息确认的概念:当消息被交付给使用者时,使用者会自动通知代理,或者只要应用程序开发人员选择这样做就会通知代理。在使用消息确认时,代理只会在收到该消息(或消息组)的通知时从队列中完全删除消息。
例如,在某些情况下,当消息不能被路由时,消息可能被返回给发布者或者删除,如果代理实现了扩展,则将消息放入所谓的 dead letter queue
中。发布者通过使用某些参数发布消息来选择如何处理这种情况。
队列、交换和绑定统称为AMQP实体。
简介
交换机是发送消息的AMQP实体。交换机获取消息并将其路由到零或多个队列。所使用的路由算法取决于交换类型(Exchange Types)和被称为绑定(Bindings)的规则。AMQP 0—9-1协议提供四种交换类型:
- Direct exchange
- Fanout exchange
- Topic exchange
- Headers exchange