RabbitMq的核心组建 Exchange and Queue

Exchange,又称交换器,它接受消息和路由信息,然后将消息发送给消息队列。对于每个虚拟主机内部,交换器有独一无二的名字。应用程序在其权限范围之内可以自由的创建、共享、使用和销毁交换器实例。 交换器可以是持久的、临时的或者自动删除的。持久交换器会一直存在于服务器,直到它被显式删除;临时交换器会工作到服务器被关闭时为止;而一旦没有应用程序使用自动删除交换器,它就会被服务器自动删除掉。 消息队列是一个具名缓冲区,它们代表一组消费者应用程序保存消息。应用程序在其权限范围之内可以自由的创建、共享、使用和消费消息队列.

Queue消息队列提供了有限制的先进先出保证。服务器会将从某一个生产者发出的同等优先级的消息按照它们进入队列的顺序传递给某个消费者,万一某些消息不能被消费者处理,它们可能会被打乱顺序重新传递。 消息队列可以是持久的、临时的或者自动删除的。临时消息队列会工作到服务器被关闭时为止;而一旦没有应用程序使用自动删除消息队列,它就会被服务器自动删除掉。只要用户(客户端)拥有相应的权限,任何队列都可以被显式删除。 消息队列将消息保存在内存、硬盘,或者这两种介质的组合之中。消息队列限定在虚拟主机范围之中。消息队列保存消息,并将消息分发给一个或多个订阅客户端。 消息队列会跟踪消息的获取情况,消息要出队就必须被获取(acquire和consume是两个动作,先执行acquire,相当于对消息加锁)。这阻止了多个客户端同时获取和消费同一条消息,也可以被用来做单个队列多个消费者之间的负载均衡。

 

RabbitMq的Exchange绑定类型有三种/直接交换/广播交换/主题交换

所谓绑定就是将一个特定的Exchange 和一个特定的Queue绑定起来,绑定关键字成为BindingKe

Exchange 和Queue的绑定可以是多对多的关系,每个发送给Exchange的消息都有一个叫做RoutingKey的关键字,Exchange要想将该消息转发给特定队列,该队列与交换器的BindingKey必须与消息的RoutingKey相匹配才行.