rabbitmq 概念回顾

rabbitmq是当下应用较多且能跨语言使用的消息队列组件。
尽管一直在使用,但是有些概念还是稍许模糊的,让我们来复习加深一下认识!

AMQP 协议

RabbitMq 本身是AMQP(Advanced Message Queuing Protocol)协议的一种实现,该协议是一个提供统一的信息交换的应用层的标准高级的开源消息队列协议。协议中有一些概念是通用的接下来我们回顾学习一下。

Message

消息:是由消息头和消息体组成的。消息头是由一系列属性定义组成的,比如路由键,消息过期时间,过期转发队列。

Publisher

消息生产者:由消息生产者将消息发送给队列服务器。

Exchange

交换机:用于将消息生产者发来的消息根据一定的规则路由(发送)到指定队列。

Binding

绑定:简单理解就是一种规则,用于描述交换机和队列之间的绑定关系。

Queue

队列:存放消息的容器。消息保存在这里等待消费者的消费。

Channel

信道:抽象的基于TCP的一种可复用的连接通道,用于客户端和mq服务器的数据交互,由于可复用能降低TCP连接创建的成本。

Consumer

消费者:消息的处理者,通过mq客户端从mq服务器队列中拉取/接收数据。

Virtual Host

虚拟主机:相当于内部隔离的一个一个rabbitmq服务器,可以通过设置多个 virtual host 隔离多个应用。多个 Virtual Host 数据不互通。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

Broker

代理:表示消息队列服务器实体。

rabbitmq支持的消息路由方式 || Exchange 分发策略

direct


直连:消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器就将消息发到对应的队列中。路由键与队列名完全匹配,如果一个队列绑定到交换机要求路由键为“dog”,则只转发 routing key 标记为“dog”的消息,不会转发“dog.puppy”,也不会转发“dog.guard”等等。它是完全匹配、单播的模式。

fanout


扇出:发送到该交换器的消息均被路由到与该交换器绑定的每个队列中。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。类似于广播,消息发送极快。

topic


主题:topic交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“”。#匹配0个或多个单词,匹配不多不少一个单词。

头部:header交换器头部匹配模式,在队列和交换器有部分匹配或完全匹配的header时进行消息路由,使用较少,性能最差。除非特定环境否则都可以用其他类型的交换器代替。

结束

最后的最后,上面这么多干货怎么能没有代码加持呢,点我直达