• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hejw19970413
V2EX  ›  程序员

如何把 http 请求转成对应的 rpc 请求。

  •  1
     
  •   hejw19970413 · Jul 14, 2021 · 6263 views
    This topic created in 1789 days ago, the information mentioned may be changed or developed.
    1. 所有的对外接口都是用 pd 来定义的,能不能在网关这一层做协议的转换
    2. 如果可以做转换,那么是手写还是程序自动转换还是说只能生成模版文件降低人工

    想了几种办法,还是思路不是很清晰,各位大佬给个思路呗。。。

    25 replies    2021-07-19 19:21:10 +08:00
    qW7bo2FbzbC0
        1
    qW7bo2FbzbC0  
       Jul 14, 2021
    rpc 包含 http,你说的那种是不是 grpc,dubbo 那种?把 http 请求包一包不就是本地方法了吗,只是序列化与传输方式不同而已
    vchroc
        2
    vchroc  
       Jul 14, 2021
    关键词:泛化调用
    hejw19970413
        3
    hejw19970413  
    OP
       Jul 14, 2021
    确实是 grpc 主要的问题就是用 pd 定义后,走后面的服务请求需要 pd 文件内的已经定义的数据格式,如果程序自动获取好像自动获取不到。。
    renyijiu
        4
    renyijiu  
       Jul 14, 2021
    Cy1
        5
    Cy1  
       Jul 14, 2021
    pd 是啥。。
    hejw19970413
        6
    hejw19970413  
    OP
       Jul 14, 2021
    @renyijiu 感谢感谢,我去好好看看
    hejw19970413
        7
    hejw19970413  
    OP
       Jul 14, 2021
    @Cy1 一种数据传输格式,跟 json 和 xml 是一类产品
    Cy1
        8
    Cy1  
       Jul 14, 2021
    你说的怕不是 pb,protobuf ?
    hejw19970413
        9
    hejw19970413  
    OP
       Jul 14, 2021
    @Cy1
    Cy1
        10
    Cy1  
       Jul 14, 2021
    我们内部是在 SpringMVC 是基础上做的,做一个特定路径如 '/url' 的 MappingHandler,
    在这个 handler 里面做自己的 pb 分发,rpc 也是这样做的
    hejw19970413
        11
    hejw19970413  
    OP
       Jul 14, 2021
    @Cy1 每加一个路由都是自己做的转发是吗?
    Cy1
        12
    Cy1  
       Jul 14, 2021
    自己定义一套类似于 @RestController,@RequestMapping 的 @MessageController,@MessageMapping,然后一个 SpringMVC 的一个特定的 HandlerMethod 内实现类似于 SpringMVC 的整个链路的流程,参考 SpringMVC 里面 HandlerMapping,HandlerChain,HandlerAdapter 的设计,做好自己的分发以及 Request,Response 的 pb 的序列化和反序列化就行。
    最终用起来的效果类似于这样
    @MessageMapping(PBMessageType.ADMIN_RESET_PASSWORD)
    PBAdmin resetPassword(PBResetAdminPasswordReq req) {
    ......
    }
    Judoon
        14
    Judoon  
       Jul 14, 2021
    http://apisix.apache.org/
    直接上全能型网关
    labulaka521
        15
    labulaka521  
       Jul 14, 2021
    我们这里使用 envoy 来实现的 内部是 grpc 通信,外部进来通过 envoy 转
    hejw19970413
        16
    hejw19970413  
    OP
       Jul 14, 2021
    其实是有些定制化的需要,更想要的是一种插件的式的协议转换,现在就是两种选择,第一种就是网关自己写对前端请求的粗力度的接口,然后根据不同的业务线进行拆分成不同的网关。第二种就用一些常见的网关系统对请求进行二次的下沉。所以想找找别人的网关是怎么做的。。。
    Lonenso
        17
    Lonenso  
       Jul 14, 2021
    jsonrpc
    young1lin
        18
    young1lin  
       Jul 14, 2021
    你对 RPC 有个错误的认知了吧? RPC 全称 Remote procedure call,其实现,HTTP 、gRPC 都是可以的啊
    wm5d8b
        19
    wm5d8b  
       Jul 15, 2021 via Android
    HTTP/2+protobuf,和 grpc 在通信效率上有哪些差异?
    hejw19970413
        20
    hejw19970413  
    OP
       Jul 15, 2021
    @wm5d8b 额,可能我没太说明白,当前的场景是 用 grpc 框架 从前端到网关这里是 http1.1 那么从网关到最终的服务都是使用的 grpc,所以这里就是 从 http1.1 到 rpc 的
    hejw19970413
        21
    hejw19970413  
    OP
       Jul 15, 2021
    @young1lin 嘿呀,我只不过是个小学生,想向问问各位哥哥姐姐的,您项目是怎么样的流程能大致说说吗
    zjyl1994
        22
    zjyl1994  
       Jul 15, 2021
    https://github.com/grpc-ecosystem/grpc-gateway

    有现成的方案,你可以看看 java 版本有没有
    jinzhongyuan
        23
    jinzhongyuan  
       Jul 15, 2021
    @Cy1 他这个简称,是业界统一的吗??
    Cy1
        24
    Cy1  
       Jul 16, 2021
    @jinzhongyuan 什么简称
    NCE
        25
    NCE  
       Jul 19, 2021
    网上有现成的方案吧? gg 下 gateway rpc
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2684 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 11:11 · PVG 19:11 · LAX 04:11 · JFK 07:11
    ♥ Do have faith in what you're doing.