Fork me on GitHub

RabbitMq

RabbitMq

Amqp 消息协议

Routingkey 路由健 连接生产者消息和exchage之间纽带。routingkey需要和交换机类型和绑定健bingdingkey联合才能最终生效。

Binding 通过绑定exchage和队列关联起来。绑定时候指定一个bindingkey。

exchange 路由交换机

交换机类型 fanout,direct,topic ,headers

fanout是广播形式,

无视routingkey,它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中

direct精确匹配

消息路由到那些 BindingKey和 RoutingKey完全匹配的队列中。

topic 是模糊匹配

  • RoutingKey 为一个点号” “分隔的字符串
  • BindingKey 和 RoutingKey 一样也是点号” “分隔的字符串;
  • BindingKey 中可以存在两种特殊 字符串”*”和”#”,用于做模糊匹配,其中”#”用于匹配0个或者多个单词。

运转流程

  • 首先生产者与mq的broker产生建立连接connection,开通一个channel

  • 生产者声明一个交换机。比如交换机类型,消息是否持久化等。

  • 生产者声明一个队列并设置属性,是否排他,是否持久化,是否自动删除

  • 生产者通过路由键将交换机和队列绑定起来

  • 生产者将消息发送到mq的broker

  • 响应的交换机通过routingkey查找对应的队列

  • 如果找到把响应的信息存储在队列中,如果不匹配按照相关配置返回生产者或者丢弃。

  • 关闭信道,关闭连接


    消费者建立连接,开通信道,向mq broker请求消费消息,可能设置一些回调函数,消费者确认ack接收到消息,mq从队列中删除已经确认的消息,关闭信道,关闭连接。

AMQP协议本身包括三层

module layer 协议最高层,主要提供一些客户端的命令queue.declare 定义队列 queue.consumer 定义订阅消费队列中消息

session layer 将客户端命令发送给服务端,将服务端返回给客户端。

ransport layer 传输二进制数据流,提供帧处理,信道复用

本文欢迎转载,但是希望注明出处并给出原文链接。 如果你有任何疑问,欢迎在下方评论区留言,我会尽快答复。 如果你喜欢或者不喜欢这篇文章,欢迎你发邮件到 alonecong@126.com 告诉我你的想法,你的建议对我非常重要。

------ 本文结束感谢您的阅读! ------
0%