zoukankan      html  css  js  c++  java
  • 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内部实现相关

    //待补齐

  • 相关阅读:
    Cocos2d-JS中的Sprite精灵类
    Cocos2d-JS中的精灵菜单和图片菜单
    Cocos2d-JS中的文本菜单
    SpringMVC01
    xml文件
    MyEclipse保存文件时 自动格式化代码! 不包括文档注释
    MyEclipse修改servlet模版
    java05 选择结构
    ssh注解开发
    使用socket实现聊天功能
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/11605638.html
Copyright © 2011-2022 走看看