AMQP协议详解

首先给大家做个类比,如:
① 你在楼下咖啡店买了无数杯咖啡后,和咖啡店小姐姐步入爱河,后来终于到了谈婚论嫁的时候。
② 你这才发现结婚的程序如此繁琐,婚纱照、结婚照、结婚证、准备婚礼、准备喜糖、回请双方同事、接亲时还有10关大考验 <-- 这是“协议”, 指的是一般规范
③ 你们商量后,决定婚礼就去海边旅行结婚,喜糖就用大白兔的,回请就给同事发个红包,但是10关大考验变成了15关 <–这是实现,指的是具体情况

一、AMQP协议对于RabbitMQ的意义

● AMQP协议作为RabbitMQ的规范,规定了RabbitMQ对外接口
● 学会了AMQP协议的使用,就基本掌握了RabbitMQ的使用
● 学会了AMQP协议的概念,就基本掌握了RabbitMQ的核心概念

二、AMQP详尽架构

AMQP协议详解_第1张图片

Broker:接收和分发消息的应用,RabbitMQ 就是 Message Broker
Virtual Host:虚拟 Broker,将多个单元隔离开
Connection:publisher / consumer 和 broker 之间的 tcp 连接
Channel:connection 内部建立的逻辑连接,通常每个线程创建单独的 channel
Routing key:路由键,用来指示消息的路由转发,相当于快递的地址
Exchange:交换机,相当于快递的分拨中心
Queue:消息队列,消息最终被送到这里等待 consumer 取走
Binding:exchange 和 queue 之间的虚拟连接,用于 message 的分发依据

三、Exchange的作用

● Exchange 是 AMQP 协议和 RabbitMQ 的 核心组件
● Exchange 的功能是根据 绑定关系路由键 为消息提供路由,将消息转发至相应的队列
● Exchange 有四种类型:Direct / Topic / Fanout / Headers,其中Headers很少使用,以前三种为主

四、Direct Exchange

AMQP协议详解_第2张图片

Message 中的 Routing Key 如果和 Binding Key 一致,Direct Exchange 则将 message 发到对应的 queue中

五、Fanout Exchange

AMQP协议详解_第3张图片

每个发到 Fanout Exchange 的 message 都会分发到所有绑定的 queue 上去

六、Topit Exchange

AMQP协议详解_第4张图片

● 根据 Routing Key 及通配规则,Topic Exchange 将消息分发到目标 Queue 中
● 全匹配:与 Direct 类似
● Binding Key 中的 #:匹配任意个数的 word
● Binding Key 中的 *:匹配任意1个 word
例子:咖啡、奶茶、果汁,三种饮料

  1. 咖啡含有咖啡因,冷热均可,苦甜均可,Binding Key:caffeine.#
  2. 奶茶不含有咖啡因,热饮,甜味,Binding Key:nocaffeine.hot.sweet
  3. 果汁不含有咖啡因,冷热均可,甜味,Binding Key:nocaffeine.* .sweet

情景一:无咖啡因、热饮、甜味
AMQP协议详解_第5张图片

情景二:有咖啡因、冷饮、苦味
AMQP协议详解_第6张图片

情景三:无咖啡因、冷饮、甜味
AMQP协议详解_第7张图片

可以去:http://tryrabbitmq.com/ 尝试一下自己的理解

七、总结

● AMQP协议直接决定了 RabbitMQ 的内部结构和外部行为
● 对于发送者来说,将消息发给特定的 Exchange
● 消息经过 Exchange 路由后,到达具体队列
● 消费者将消息从监听的队列中取走
● Exchange 主要有 3 种类型:Direct / Topic / Fanout
Direct (直接路由):Routing Key = Binding Key,容易配置和使用
Fanout (广播路由):群发绑定的所有队列,适用于消息广播
Topic (话题路由):功能较为复杂,但能降级为 Direct ,建议优先适用,为以后拓展留余地

你可能感兴趣的:(协议,java-rabbitmq,rabbitmq,java)