前言
RabbitMQ是基于AMQP协议的,通过使用通用协议就可以做到在不同语言之间传递。
AMQP协议
核心概念
-
server:又称broker,接受客户端连接,实现AMQP实体服务。
-
connection:连接和具体broker网络连接。
-
channel:网络信道,几乎所有操作都在channel中进行,channel是消息读写的通道。客户端可以建立多个channel,每个channel表示一个会话任务。
-
message:消息,服务器和应用程序之间传递的数据,由properties和body组成。properties可以对消息进行修饰,比如消息的优先级,延迟等高级特性;body是消息实体内容。
-
Virtual host:虚拟主机,用于逻辑隔离,最上层消息的路由。一个Virtual host可以若干个Exchange和Queue,同一个Virtual host不能有同名的Exchange或Queue。
-
Exchange:交换机,接受消息,根据路由键转发消息到绑定的队列上。
-
banding:Exchange和Queue之间的虚拟连接,binding中可以包括routing key
-
routing key:一个路由规则,虚拟机根据他来确定如何路由 一条消息。
-
Queue:消息队列,用来存放消息的队列。
Exchange
交换机的类型,direct、topic、fanout、headers,durability(是否需要持久化true需要)auto delete当最后一个绑定Exchange上的队列被删除Exchange也删除。
-
Direct Exchange,所有发送到Direct Exchange的消息被转发到RouteKey 中指定的Queue,Direct Exchange可以使用默认的默认的Exchange (default Exchange),默认的Exchange会绑定所有的队列,所以Direct可以直接使用Queue名(作为routing key )绑定。或者消费者和生产者的routing key完全匹配。
-
Toptic Exchange,是指发送到Topic Exchange的消息被转发到所有关心的Routing key中指定topic的Queue上。Exchange 将routing key和某Topic进行模糊匹配,此时队列需要绑定一个topic。所谓模糊匹配就是可以使用通配符,“#”可以匹配一个或多个词,“”只匹配一个词比如“log.#”可以匹配“log.info.test” "log. "就只能匹配log.error。
-
Fanout Exchange:不处理路由键,只需简单的将队列绑定到交换机上。发送到改交换机上的消息都会被发送到与该交换机绑定的队列上。Fanout转发是最快的,关注公众号:麒麟改bug,小编这里还准备了一份RabbitMQ200多页的学习笔记分享给大家!