• 2019-09-29-阿里三面


    1:ZAB协议

    //待补齐

    2:DUBBO协议

    Dubbo协议先抄官方一张图吧,由图可以知道,Dubbo协议是一个字节型的协议,使用字节的特定位置表示特定的含义。

    1:0-16 bit位,第一个字节和第二个字节表示魔法值,用于标识是dubbo协议,它的值是 0xdabb

    2:16 bit位,一个bit位,用于标识是请求还是响应,1表示请求,0表示响应

    3:17 bit位,一个bit位,只在是请求时才有用,用于标识是否需要从服务器返回值。

    4:18 bit位,一个bit位,用于标识是不是一个事件,比如,心跳事件。如果是,设置成 1.

    5:19-24 bit位,5个bit位,标识序列化类型,比如,如果是fastjson,值是6,总共支持2^5中序列化类型。

    6:24-31 bit位,一个字节,表示服务器的响应状态码。仅在是请求时才有用。

    • 20 - OK
    • 30 - CLIENT_TIMEOUT
    • 31 - SERVER_TIMEOUT
    • 40 - BAD_REQUEST
    • 50 - BAD_RESPONSE
    • 60 - SERVICE_NOT_FOUND
    • 70 - SERVICE_ERROR
    • 80 - SERVER_ERROR
    • 90 - CLIENT_ERROR
    • 100 - SERVER_THREADPOOL_EXHAUSTED_ERROR

     以上一个int,前四个字节的内容。

    7:第4个自己和第12个字节内容表示请求id,标识唯一的请求。64位长整数。

    8:第13个字节和第16个字节:序列化后的内容长度(可变部分),按字节计数。int类型。

    9:Variable Part

    • 被特定的序列化类型(由序列化 ID 标识)序列化后,每个部分都是一个 byte [] 或者 byte

      • 如果是请求包 ( Req/Res = 1),则每个部分依次为:
        • Dubbo version
        • Service name
        • Service version
        • Method name
        • Method parameter types
        • Method arguments
        • Attachments
      • 如果是响应包(Req/Res = 0),则每个部分依次为:
        • 返回值类型(byte),标识从服务器端返回的值类型:
          • 返回空值:RESPONSE_NULL_VALUE 2
          • 正常响应值: RESPONSE_VALUE 1
          • 异常:RESPONSE_WITH_EXCEPTION 0
        • 返回值:从服务端返回的响应bytes

    **注意:**对于(Variable Part)变长部分,当前版本的dubbo框架使用json序列化时,在每部分内容间额外增加了换行符作为分隔

    http://dubbo.apache.org/zh-cn/blog/dubbo-protocol.html

    3:RocketMQ内部实现相关

    //待补齐

  • 相关阅读:
    结对(求数组的最大子数组和)
    结对3(求一维数组最大子数组的和扩展)
    结对3(电梯调度需求分析)
    结对开发2(求二维数组的最大子数组和)
    四则运算3(四则运算2程序的扩展)
    四则运算2代码测试
    四则运算2程序及运行
    C++输出四则运算设计题的思路
    C++编程显示四则运算题目
    软件课外读物阅读计划
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/11605638.html
Copyright © 2020-2023  润新知