rabbitmq概念
概述
RabbitMQ:http://www.rabbitmq.com/
是⼀个开源的AMQP实现,服务器端⽤Erlang语⾔编写,⽀持多种客户端,如:Python、Ruby、.NET、Java、C、⽤于在分布式系统中存储转发消息,在易⽤
性、扩展性、⾼可⽤性等⽅⾯表现不错,与SpringAMQP完美的整合、API丰富易⽤。
⽂档:https://www.rabbitmq.com/getstarted.html
RabbitMQ 在吞吐量方面虽然稍逊于 Kafka 和 RocketMQ ,但是由于它基于 erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级。但是也因为 RabbitMQ 基于 erlang 开发,所以国内很少有公司有实力做erlang源码级别的研究和定制。
如果业务场景对并发量要求不是太高(十万级、百万级),那这些消息队列中,RabbitMQ 一定是你的首选。
核心概念
Broker:
RabbitMQ的服务端程序,可以认为⼀个mq节点就是⼀个broker
Virtual host 虚拟主机:
虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。
⽤于不同业务模块的逻辑隔离,⼀个Virtual Host⾥⾯可以有若⼲个Exchange和Queue,同⼀个VirtualHost ⾥⾯不能有相同名称的Exchange或Queue。
Connection连接:
是RabbitMQ的socket连接,它封装了socket协议相关部分逻辑,⼀个连接上可以有多个channel进⾏通信。
Channel 信道:
⼀条⽀持多路复⽤的通道,独⽴的双向数据流通道,可以发布、订阅、接收消息。
信道是建⽴在真实的TCP连接内的虚拟连接,复⽤TCP连接的通道。
Producer⽣产者:
创建消息Message,然后发布到RabbitMQ中
Consumer消费者:
消费队列⾥⾯的消息
Message 消息:
消息,消息是不具名(没有署名)的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。
RoutingKey 路由键:
⽣产者将消息发给交换器的时候,⼀般会指定⼀个RoutingKey,⽤来指定这个消息的路由规则。
最⼤⻓度255 字节。
Exchange 交换器:
⽣产者将消息发送到 Exchange,交换器将消息路由到⼀个或者多个队列中,⾥⾯有多个类型,后续再⼀⼀介绍,队列和交换机是多对多的关系。
Binding 绑定:
通过绑定将交换器与队列关联起来,在绑定的时候⼀般会指定⼀个绑定键 ( BindingKey ),这样RabbitMQ 就知道如何正确地将消息路由到队列了。
⽣产者将消息发送给交换器时,需要⼀个RoutingKey,当BindingKey和 RoutingKey相匹配时,消息会被路由到对应的队列中。
Queue 队列:
是RabbitMQ 的内部对象,⽤于存储消息,消息都只能存储在队列中。
交换机类型
Direct Exchange 定向
将⼀个队列绑定到交换机上,要求该消息与⼀个特定的路由键完全匹配。
例⼦:如果⼀个队列绑定到该交换机上要求路由键 “aabb”,则只有被标记为“aabb”的消息才被转发, 不会转发aabb.cc,也不会转发gg.aabb,只会转发 aabb。
处理路由键。
Fanout Exchange ⼴播
只需要简单的将队列绑定到交换机上,⼀个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像⼦⽹⼴播,⼦⽹内每台的主机都获得 了⼀份复制的消息。
Fanout交换机转发消息是最快的,⽤于发布订阅, ⼴播形式,中⽂是扇形。
不处理路由键。
Topic Exchange 通配符
主题交换机是⼀种发布/订阅的模式,结合了直连交换机与扇形交换机的特点。
将路由键和某模式进⾏匹配。此时队列需要绑定要⼀个模式上。
符号“#”匹配⼀个或多个词,符号“*”匹配不多不少⼀个词。
例⼦:因此“abc.#”能够匹配到“abc.def.ghi”,但是 “abc.*” 只会匹配到“abc.def”。
处理路由键。
Headers Exchanges(很少使用)
根据发送的消息内容中的headers属性进⾏匹配, 在绑定Queue与Exchange时指定⼀组键值对。
当消息发送到RabbitMQ时会取到该消息的headers 与Exchange绑定时指定的键值对进⾏匹配。
如果完全匹配则消息会路由到该队列,否则不会路由到该队列。
不处理路由键
教程
点击get started
点击 RabbitMQ Tutorials
里面有7种教程。
网上有很多资料都说几种模式,好多图都是从这里来的。