赞
踩
RabbitMQ是一个消息代理,核心原理:发送消息,接收消息。
RabbitMQ主要用于组件之间的解耦,消息发送者无需知道消息使用者的存在,反之亦然。
Broker:消息队列服务器实体
消息:每个消息都有一个路由键(routing key)的属性。就是一个简单的字符串。
connection:应用程序与broker的网络连接。
channel:几乎所有的操作都在channel中进行,channel是进行消息读写的通道。客户端可建立多个channel,每个channel代表一个会话任务。
交换机:接收消息,根据路由键转发消息到绑定的队列。
绑定:一个绑定就是基于路由键将交换机和队列连接起来的路由规则,所以交换机不过就是一个由绑定构成的路由表。
举例:一个具有路由键“key1”的消息要发送到两个队列,queueA和queueB。要做到这点就要建立两个绑定,每个绑定连接一个交换机和一个队列。两者都是由路由键“key1”触发,这种情况,交换机会复制一份消息并把它们分别发送到两个队列中。
队列:消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。
交换机用来接收消息,转发消息到绑定的队列,是rabbitMq中的核心。
交换机共有4种类型:direct,topic,headers和fanout。
为什么不创建一种交换机来处理所有类型的路由规则?因为每种规则匹配时的CPU开销是不同的,所以根据不同需求选择合适交换机。
举例:一个"topic"类型的交换机会将消息的路由键与类似“dog.*”的模式进行匹配。一个“direct”类型的交换机会将路由键与“dogs”进行比较。匹配末端通配符比直接比较消耗更多的cpu,所以如果用不到“topic”类型交换机带来的灵活性,就通过“direct”类型交换机获得更高的处理效率。
routingKey与队列名完全匹配,如果一个队列绑定到交换机要求路由键为“dog”,则只转发routingkey标记为dog的消息,不会转发dog.puppy,也不会转发dog.guard等。
Topic类型交换机通过模式匹配分配消息的routing-key属性。将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。
它将routing-key和binding-key的字符串切分成单词。这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,*匹配不多不少一个单词。
例如,binding key:*.stock.#匹配routing key:
usd.stock和eur.stock.db,但是不匹配stock.nana。例如,“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*”只会匹配到“audit.irs”。
fanout交换机不处理路由键,简单的将队列绑定到交换机上,每个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。
很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。
队列的属性: 持久性:如果启用,队列将在Server服务重启前都有效。
自动删除:如果启用,那么队列将会在所有的消费者停止使用之后自动删除自身。
惰性:如果没有声明队列,那么在执行到使用的时候会导致异常,并不会主动声明。 排他性:如果启用,队列只能被声明它的消费者使用。
参考:https://www.cnblogs.com/starof/p/4173413.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。