文章目录
前言
本文主要记录一下rabbitmq的一些基础概念,便于日后的学习交流使用.
一、RabbitMQ是什么?
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端。(百度百科)
其中,AMQP是一个具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开发标准。为面向消息的中间件设计,AMQP的协议模型如下:
二、RabbitMQ的应用场景
1. 服务解耦
多系统、异构系统间的数据交换(消息通知/通讯)问题,也可以把它用于系统间服务的相互调用(RPC)
2. 削峰
一般在秒杀或团抢活动中使用广泛,可以缓解短时间内高流量压垮应用
3.异步化缓冲
将不是必须的业务逻辑,异步处理,如:
用户在注册成功时,给用户发送注册邮件和短信通知的业务逻辑可以使用rabbitmq异步处理,提升系统的响应速度
三、RabbitMQ的核心概念
1.Server
又称Broker,接受客户端的连接,实现AMQP实体服务
2.Connection
是RabbitMQ的socket链接(也就是应用程序与Broker之间的网络连接),它封装了socket协议相关部分逻辑
3.Channel
网络信道,几乎所有的操作都在Channel中进行,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。
客户端可建立多个Channel,每个Channel代表一个会话任务。
4.Message
消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容。
5.Virtual Host
虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有多个Exchange和Queue,同一个Virtual Host不能有相同名称的Exchange或Queue。
6.Exchange
交换机,接收消息,根据路由键(routing key)转发消息到对应的队列(Queue)
6.1 交换机的属性
1、Name:交换机名称
2、Type:交换机类型:fanout、direct、topic、headers
3、Durability:是否需要持久化,true为持久化
4、Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange
5、Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false
6、Arguments:扩展参数,用于扩展AMQP协议自制定化使用
7.Binding
Exchange和Queue之间的虚拟连接,binding中可以包含routing key
8.Routing key
消息的路由规则,routing key需要与Exchange Type及binding key联合使用才能最终生效。
RabbitMQ为routing key设定的长度限制为255 bytes。
9.Queue
也称Message Queue,消息队列,保存消息并转发给消费者。多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
10.Binding key
在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key。binding key 依赖于Exchange Type,当routing key匹配到对应的Exchange Type下的binding key时,消息则会被路由到对应的Queue中。
11.Exchange Type
RabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种,head一般不用,在此不做介绍
a)fanout:所有发送到某个Exchange上的消息,都会被路由到绑定了这个Exchange的Queue中
b)direct:发送到某个Exchange上的消息,会被路由到binding key与routing key完全匹配的Queue中
c)topic:和direct类似,但是支持通配符‘*’与‘#’,其中‘*’支持匹配‘.’后面一个单词,比如:test.* 可以匹配test.a,test.b,test.ab;‘#’可以匹配‘.’后面多个单词(可以是零个),比如:test.#可以匹配test.a,test.b,test.a.b