- 简介
- 消息队列提供一个异步通信机制,消息的发送者不必一直等待消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被缓存到队列中;当网络畅通时,消息将转发给相应的应用程序或服务。前提是这些服务或程序订阅了该消息。
- RabbitMQ是使用Erlang语言(在数据交互方面性能优秀,有着和原生Socket一样的延迟,这也是RabbitMQ高性能的原因所在)编写的,并且RabbitMQ是基于AMQP协议的。
- 特点
- 开源、性能优秀、稳定保障
- 提供可靠性消息投递模式、返回模式
- 与Spring AMQP完美结合,API丰富
- 集群模式丰富,表达式配置、HA模式、镜像队列模型
- 保证数据 不丢失的前提做到高可靠性、可用性
- 应用场景
- 异步处理,把消息放入消息中间件中,等到需要的时候再去处理
- 流量削峰,例如在秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使系统不会因为超负载而崩溃
- 日志处理
- 应用解耦
- 使用MQ发布订阅模式,服务A只生产消息到MQ,B、C、D从MQ中读取消息。需要A的消息就订阅,不需要就取消订阅。这种方式可以降低服务或者系统之间的耦合
- AMQP协议
- 二进制协议,是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
- 概念
- Server
- 接收客户端的连接 实现AMQP实体服务
- Connection
- 连接 应用程序与Server的网络连接,TCP连接
- Channel
- 信道,消息读写等操作在信道中进行。客户端可以建立多个信道,每个信道代表一个会话任务
- Message
- 消息,应用程序和服务器之间传送的数据,消息可以非常简单,也可以非常复杂,在Properties和Body组成
- Properties为外包装,可以对消息进行装饰,比如消息的优先级,延迟等高级特性
- Body就是消息体内容
- Virtual Host
- 虚拟主机,用于逻辑隔离。一个虚拟主机里面可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名称的Exchange或Queue
- Exchange
- 交换器,接收消息,按照路由规则将小溪路由到一个或多个队列,如果路由不到,或者返回给生产者,或者直接丢弃。
- RabbitMQ常用的交换器类型有direct,topic,fanout,header四种
- Binding
- 绑定,交换器和消息队列之间的虚拟连接,绑定中可以包含一个或者多个RoutingKey
- RoutingKey
- 路由键,生产者将消息发送给交换器的时候,会发送一个RoutingKey,用来指定路由规则,这样交换器就知道把消息发送到哪个队列中
- 路由键通常为“.”分割的字符串 例如“com.rabbitmq“
- Queue
- 消息队列,用来保存消息,供消费者消费。
- Server
- AMQP协议模型
- AMQP组成
- 生产者
- 消费者
- 服务端
- 常用交换器
- Direct Exchange
- 将所有发送到该交换器的消息被转发到RoutingKey指定的队列中。也就是说路由到BindingKey和RoutingKey完全匹配的队列中
- Topic Exchange
- 将所有发送到Topic Exchange的被转发到RoutingKey中指定的Topic队列上面
- Exchange将RoutingKey和某个Topic进行模糊匹配。其中“”匹配一个词,“#”用于匹配一个或者多个词
- 例如,“com.#”可以匹配“com.rabbitmq.oa”和“com.rabbitmq”;
- Fanout Exchange
- 不处理路由键,会把所有发送到交换器的消息路由到所有绑定的队列中,
- 优点:转发消息快,性能最好
- Headers
- 根据消息内容中的header属性进行匹配。headers类型交换性能差,在实际中并不常用.
- Direct Exchange
标签:交换器,RoutingKey,Exchange,队列,简介,RabbitMQ,消息,路由 From: https://www.cnblogs.com/xiaoxi888/p/17543093.html