V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hejw19970413
V2EX  ›  程序员

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

  •  1
     
  •   hejw19970413 · 2021-07-14 10:31:33 +08:00 · 4758 次点击
    这是一个创建于 1207 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 所有的对外接口都是用 pd 来定义的,能不能在网关这一层做协议的转换
    2. 如果可以做转换,那么是手写还是程序自动转换还是说只能生成模版文件降低人工

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

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

    有现成的方案,你可以看看 java 版本有没有
    jinzhongyuan
        23
    jinzhongyuan  
       2021-07-15 19:01:01 +08:00
    @Cy1 他这个简称,是业界统一的吗??
    Cy1
        24
    Cy1  
       2021-07-16 09:43:02 +08:00
    @jinzhongyuan 什么简称
    NCE
        25
    NCE  
       2021-07-19 19:21:10 +08:00
    网上有现成的方案吧? gg 下 gateway rpc
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2654 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:19 · PVG 20:19 · LAX 05:19 · JFK 08:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.