AMQP协议及其核心概念Channel、Virtual Host、Exchange、Queue、RoutingKey\BindingKey介绍

AMQP协议

AMQP(advanced message queuing protocol)是一种协议,全称为 “高级消息队列协议”。更多信息请自行百度。

AMQP协议模型
上图也可以充分展示 RabbitMQ 的工作模型,依据该图有助有理解RabbitMQ的核心工作组件;其中,每个 RabbitMQ 消息服务代理至少有一个 Virtual host虚拟主机(默认/),每个 Virtual host虚拟主机 中的 Exchange交换机、Queue队列以及Exchange交换机与Queue队列之间的绑定BindingKey都是隔离相互独立。
Producer(生产者)和Consumer(消费者)通过与RabbitMQ服务建立 Connection来保持TCP长连接,然后在 Connection 的基础上建立若干Channel 信道,用来发送与接收消息。

Connection(连接)

不管是 Producer(生产者)还是 Consumer(消费者),生产者要想发送消息给Exchange或者消费者想从Queue中消费消息,首先就要与RabbitMQ服务建立连接,这个连接就是 ConnectionConnection 是一个TCP长连接

Channel(信道)

Channel可以实现线程间隔离

Channel是在 Connection 的基础上建立的虚拟连接RabbitMQ中大部分的操作都是使用 Channel 完成的,比如:声明Queue、声明Exchange、发布消息、消费消息等。

此时是否有这样一个疑问:既然已经有了Connection,完全可以使用Connection完成Channel的工作,为什么还要引入Channel这样一个虚拟连接的概念呢?因为现在的程序都是支持多线程的,如果没有Channel,那么每个线程在访问RabbitMQ服务时都要建立一个Connection这样的TCP连接,对于操作系统来说,建立和销毁TCP连接是非常大的开销,在系统访问流量高峰时,会严重影响系统性能。

Channel就是为了解决这种问题,通常情况下,每个线程创建单独的Channel进行通讯,每个Channel都有自己的 channel id 帮助Broker和客户端识别Channel,所以Channel之间是完全隔离的
ConnectionChannel之间的关系可以使用光纤电缆比喻,如果把Connection比作一条光纤电缆,那么Channel就相当于是电缆中的一束光纤

Virtual Host(虚拟主机)

  • 对于数据库而言;不同的项目应用会使用独立的库进行数据存储;同理,针对不同的项目应用可以定义不同的Virtual host虚拟主机。即Virtual host虚拟主机可以用来隔离不同的应用程序
  • Virtual host虚拟主机需要和User用户进行绑定,主要是用户权限隔离

Virtual host是虚拟主机,一个Broker中可以有多个Virtual host,每个Virtual host都有一套自己的ExchangeQueue,同一个Virtual host中的ExchangeQueue不能重名,不同的Virtual host中的ExchangeQueue名字可以一样。这样,不同的用户在访问同一个RabbitMQ Broker时,可以创建自己单独的Virtual host,然后在自己的Virtual host中创建ExchangeQueue,很好地做到了不同用户之间相互隔离的效果。

Exchange(交换机)

Exchange是一个比较重要的概念,它是消息到达RabbitMQ服务的第一站(也可以说,消息就是发送给指定的Exchange,Exchange根据RoutingKey和BindingKey进行匹配路由消息给对应的Queue),主要负责根据不同的分发规则将消息分发到不同的Queue,供订阅了相关Queue的消费者消费到指定的消息。那Exchange有哪些分发消息的规则呢?这就要说到Exchange的4种类型了:direct、fanout、topic、headers

  • direct和headers对应点对点模式;其中headers类型不太常用。
  • fanout和topic对应发布订阅模式; fanout类型就是广播;topic就是更加细致的发布订阅

RoutingKey|BindingKey

RoutingKey ,翻译成中文就是路由键。当我们创建好ExchangeQueue之后,需要使用Routing key(通常叫作Binding key)将它们绑定起来。Producer在向Exchange发送一条消息的时候,必须指定一个Routing key,然后Exchange接收到这条消息之后,会解析Routing key,然后根据ExchangeQueue的绑定规则,将消息分发到符合规则的Queue中。

Queue(队列)

Queue是一个用来存放消息的队列,生产者发送给Exchange的消息最终都会被路由到对应Queue中,消费者消费消息时是直接从Queue中取走消息

参数作用
x-message-ttl发送到队列的消息在丢弃之前可以存活时间(毫秒)
x-max-length队列最大长度
x-expires队列在被自动删除(毫秒)之前可以使用多长时间
x-max-length-bytes消息容量限制,该参数是非负整数值。该参数和x-max-length目的一样限制队列的容量,但是这个是靠队列大小(bytes)来达到限制。
x-dead-letter-exchange设置队列溢出行为。这决定了在达到队列的最大长度时消息会发生什么。有效值为drop-head或reject-publish。交换的可选名称,如果消息被拒绝或过期,将重新发布这些名称
x-dead-letter-routing-key可选的替换路由密钥,用于在消息以字母为单位时使用。如果未设置,叫使用消息的原始路由密钥
x-max-priority队列支持的最大优先级数;如果未设置,队列将不支持消息优先级
x-queue-mode将队列设置为延迟模式,在磁盘上保留尽可能多的消息以减少内存使用,如果未设置,队列将保留内存缓存以尽快传递消息
x-queue-master-locator将队列设置为主位置模式,确定在节点集群上声明时队列主机所在的规则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值