当前位置:   article > 正文

rabbitmq网络请求分析_rabbit mq authentication failure

rabbit mq authentication failure

amqp协议是用长连接,每次发送数据包,可以包含多个帧。每个帧包含帧类型、通道、长度,及每种类型所需要的特定数据。帧类型包括:方法、请求头、请求体等。

1、先做tcp三次握手

2、连接。client发送amqp协议版本,0.9.1,这个包有点特殊,不是正常的帧结构。

然后,server响应Connection.Start消息。client响应Connection.Start-Ok,包含用户名/密码信息,连接建立。这个过程中,会互相发送彼此的环境等数据。

server端发送数据:

  1. capabilities F
  2. publisher_confirms t 1
  3. exchange_exchange_bindings t 1
  4. basic.nack t 1
  5. consumer_cancel_notify t 1
  6. connection.blocked t 1
  7. consumer_priorities t 1
  8. authentication_failure_close t 1
  9. per_consumer_qos t 1
  10. direct_reply_to t 1
  11. cluster_name S rabbit@DESKTOP-I4HSGR5
  12. copyright S .Copyright (c) 2007-2019 Pivotal Software, Inc.informationS9Licensed under the MPL 1.1. Website: https://rabbitmq.com
  13. platform S Erlang/OTP 22.2
  14. product S RabbitMQ
  15. version S 3.8.2
  16. Mechanisms: PLAIN AMQPLAIN
  17. Locales: en_US

client发送数据:

  1. product S RabbitMQ
  2. copyright S .Copyright (c) 2007-2016 Pivotal Software, Inc.
  3. capabilities F
  4. exchange_exchange_bindings t 1
  5. connection.blocked t 1
  6. authentication_failure_close t 1
  7. basic.nack t 1
  8. publisher_confirms t 1
  9. consumer_cancel_notify t 1
  10. information S Licensed under the MPL. See http://www.rabbitmq.com/
  11. version S 3.6.3
  12. platform S Java
  13. Mechanisms: PLAIN
  14. username/password: xxx xxx
  15. Locales: en_US

3、异常关闭连接。鉴权、检查队列(跟创建队列一样都是Queue.Declare,只是参数不一样)、指定延迟路由等失败,则server发送Connection.Close消息,并返回错误原因。

3、调频。server发送Connection.Tune,client响应Connection.Tune_Ok

这个阶段会同步通道最大长度(不确定),帧最大长度(不确定),心跳间隔(不确定,实际是30秒一次,server和client都会发)

4、连接vhost。client发送连接的vhost的请求Connection.Open。client响应连接结果Connection.Open_Ok。如果没有这个vhost,则通过Connection.Close返回错误信息。

5、建立通道。client发送连接通道请求Channel.Open,server响应连接结果Channel.Open_Ok。通道号从1开始累加。如果项目有多个通道连接,就会请求多次,channel是1、2、3、4、5等等。

6、声明路由。client发送Exchange.Declare消息,server响应Exchange.Declare_Ok。

7、声明队列。client发送声明队列请求Queue.Declare,server响应创建结果Queue.Declare_Ok。如果没有配置创建队列,就不会有声明队列的请求。

8、消费者Qos控制。似乎只对于接收消息的服务有效,且针对每个channel,client分别发送Qos消息Basic.Qos,server响应Basic.Qos_Ok。Prefetch-Count是指的在一个通道接收的同时处理消息的数量,可能不同channel,及同一channel的多个消息,消费者客户端的处理方式不一样吧,会不会是channel用多线程,同一channel多个消息用排队?

9、消费者的消费队列控制。client发送Basic.Consume消息,server响应Basic.Consume_Ok消息。

10、生产者发送消息。client发送列队消息,一次请求包含3个帧,分别是Basic.Publish方法帧,及请求头、请求体帧。没有响应数据包。

11、消费者接收消息。server发送列队消息,包含3个帧,分别是Basic.Deliver方法帧,及请求头、请求体帧。

处理成功后,client发送Basic.Ack响应包。Basic.Ack响应包中的Delivery-Tag对应Basic.Deliver中的Delivery-Tag,从1累加。处理失败,client发送Basic.Nack响应包。

12、发送心跳。仅返回tcp的ACK包,不返回mq消息包

13、结束连接。

关闭tcp连接,发送RST数据包

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/628803
推荐阅读
相关标签
  

闽ICP备14008679号