AMQP概念
是一个协议
- 高级消息队列协议 Advanced Message Queue Protocol)
- 是应用层协议的一个开放标准
- 为面向消息的中间件设计的
- 同时还是Wire级的协议,它描述了在网络上传输的数据的格式,以字节为流。因此任何遵守此数据格式的数据,器创建和解释的消息,都能与其它兼容工具进行互操作【?尝试总结一下JMS与AMQP的区别】【?尝试了解一下啥是Wire级的协议】
重要的概念(4个)
- 虚拟主机(virtual host)
一个虚拟主机额持有一组交换机、队列、绑定。
虚拟主机存在的必要性:RabbitMq当中,用户只能在虚拟主机额的力度进行权限控制。因此,如果需要禁止A组方位B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。 【?虚拟主机这个元素怎么看着是RabbitMq的概念,查阅其它资料仔细核对AMQP】
每个RabbitMq服务器都有默认的虚拟主机“/”。【?“/”这个是虚拟主机的代名词吗?】 - 交换机(exchange)
用来转发Producer生产的消息。它不做存贮,因此呢,如果没有Queue bind到Exchange上的话,他会直接丢弃掉Producer发来的消息。 - 队列(queue)
- 绑定(binding)
其它概念
- RoutingKey
简单的解释为:Exchange和Queue的路线。
在这里有个概念,Exchange和Queue都要通过channel来定义,而RoutingKey则只需要在binding时取个名字就行了。【?需要细致的去整理channel、binding这个的深入知识】
消息发送、消费过程总结
- 发送过程【?从生产者-tcp/信道建立-信道建立 的整个流转的准确表示】
- 消费者消费过程
Consumer消费消息之前,需要创建一个Queue,并把这个Queue bind 到指定的Exchange上,然后Exchange回报消息转发到Queue上,Queue会负责存储消息,Consumer可以通过主动Pop或者是Subscribe之后被动毁掉的方式从Queue钟取得消息。【?主动Pop或者是Subscribe的概念不明确】
配图
蓝色-clients【生产者、消费者】
绿色-Exchange
红色-Queue
- 交换机(Exchange),他是发送消息的实体。【?Exchange是发送消息的实体这个说法,有点突兀,有没有更加圆滑的解释】
- 队列(Queue),这是接收消息的实体。【?Exchange是接收消息的实体,这个说法是相对于Bind来说的吧】
- 绑定器(Bind),将交换机和对接连接起来,并封装消息的路由信息。【?它是将Exchange和Queue两个给串联起来了,那它做的是什么封装呢】
图解和分析 producer的send message、RabbitMq Server 路由消息、消费者的Receive Message
- 获取Conection
- 获取Channel
- 定义Exchange,Queue
- 使用一个RoutingKey,蒋Queue Binding到一个Exchange上
- 通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上
- 接收方接收时,也是获取connectiong,丽娜姐获取channel,然后指定Queue直接到它关系的Queue上取消息,他对Exchange,RoutingKey以及bingding都不关心,到对应的Queue上去取消息就OK了
对于整个过程会有一些疑问持续了解
【?producer在第一次连接时会做啥,或者说producer从建立连接到发送一个条有效的消息到Queue中,对E、Q、R分别做了有几个阶段,以及各个阶段内做了些什么事】
【?按照设计Exchange 与 Queue之间,可以被多条RoutingKey关联,请问这个在实际场景中是否有存在】