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

spring 转发请求到其他服务有什么优雅的办法吗?

  •  
  •   rizon ·
    othorizon · 2019-12-17 12:12:55 +08:00 · 6431 次点击
    这是一个创建于 1782 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类似网关, 我们内部服务分机房部署,外面有一个全局的控制台服务, 我要把传到控制台的服务中的部分请求转发到机房内部, 转发方式就是根据 header 中请求的机房参数。

    因为控制台本身是有业务的,所以不是一个真的网关,这种功能有什么简洁高效的实现方式吗?

    要求:

    1. 可以转发 get、post 请求
    2. 可以解析 header,并且可以往 header 中放入新的参数
    21 条回复    2020-01-13 18:27:10 +08:00
    fangzy
        1
    fangzy  
       2019-12-17 12:22:44 +08:00 via Android
    增加个拦截器,配合注解之类的
    chendy
        2
    chendy  
       2019-12-17 12:27:33 +08:00
    网关的拦截器 /插件里放业务
    Cbdy
        3
    Cbdy  
       2019-12-17 12:30:06 +08:00 via Android
    spring cloud gateway 的 proxy 功能了解一下
    donnior
        4
    donnior  
       2019-12-17 12:59:11 +08:00
    spring cloud gateway +1

    项目中遇到过楼主类似的场景,完全是可行的。

    机房的转发规则视需求可以静态配置也可以使用其 API 动态添加;修改 header 可以使用其 filter 机制来实现
    xuanbg
        5
    xuanbg  
       2019-12-17 13:05:39 +08:00
    都走 gateway 不行吗?
    realpg
        6
    realpg  
       2019-12-17 13:22:54 +08:00
    openrusty 不香么
    shihty5
        7
    shihty5  
       2019-12-17 13:26:07 +08:00
    话说 zuul 和 gateway 有什么区别
    luozic
        8
    luozic  
       2019-12-17 13:27:44 +08:00
    为啥不用基于 nginx 的网关产品?
    wshcdr
        9
    wshcdr  
       2019-12-17 13:39:00 +08:00
    zuul 就是 网关
    Jrue0011
        10
    Jrue0011  
       2019-12-17 14:08:44 +08:00
    https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.0.RELEASE/reference/html/#building-a-simple-gateway-using-spring-mvc-or-webflux
    看了下楼上说的 spring cloud gateway 的 proxyexchange,应该是可以嵌入自己的 web 应用里的?也支持注入 header 和 parameter
    chaoshui
        11
    chaoshui  
       2019-12-17 14:09:41 +08:00
    @realpg 是 openresty 吧
    x66
        12
    x66  
       2019-12-17 14:10:15 +08:00
    zuul 几行配置就搞定了。。
    realpg
        13
    realpg  
       2019-12-17 14:11:50 +08:00
    @chaoshui #11
    手残 领会精神。。。
    xiwangzishi
        14
    xiwangzishi  
       2019-12-17 14:58:17 +08:00
    apisix 值得拥有!
    phantomzz
        15
    phantomzz  
       2019-12-17 16:11:57 +08:00   ❤️ 1
    @shihty5 zuul1 是基于 BIO 的,zuul2 基于 NIO,但是与 Spring cloud 没什么关系了。Spring cloud Gateway 是因为 zuul2 跳票太久,自己 spencer gibb 自己搞的基于 NIO 的网关
    rizon
        16
    rizon  
    OP
       2019-12-18 15:34:06 +08:00
    @Cbdy #3
    @Jrue0011 #10

    @phantomzz #15
    Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time. Please remove spring-boot-starter-web dependency.

    不能在原有的 spring boot 项目中用,,放弃了,自己手动写吧
    Jrue0011
        17
    Jrue0011  
       2019-12-18 17:20:58 +08:00
    @rizon 额。。。你是引入了整个 spring-cloud-starter-gateway 吗,gateway 只能基于 webflux 使用。ProxyExchange 功能应该是只需要引入 spring-cloud-gateway-mvc 就行了
    phantomzz
        18
    phantomzz  
       2019-12-19 09:06:25 +08:00
    @rizon gateway 是基于 netty 的,和 servlet 容器不兼容,https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.0.RELEASE/reference/html/#gateway-starter

    建议你使用 zuul1,可以和你现在的环境无缝兼容,client 用 okhttp 就好了。
    dyrone
        19
    dyrone  
       2019-12-19 13:08:39 +08:00
    部门描述:~~~

    代码平台(代码托管、代码效能、代码智能)是阿里巴巴一站式智能研发协同平台的核心服务,对内为阿里几万产品研发相关人员提供工具支撑,对外是阿里云开发者生态关键一环。“Work Like Alibaba”将成为中国及至全世界开发者最潮流的口号。

    本职位主要职责是负责代码平台基础设施的架构演进、Git 核心技术开发,代码领域技术趋势跟踪、下一代代码平台预言。我们是一群懂代码,爱 Git,有技术有梦想的工程师。让我们一起携手解决跨地域、分布式、海量代码托管等世界级业务和技术难题,为阿里巴巴集团内部、生态伙伴以及云上开发者服务。


    我们的使命:帮助企业让更多的工作内容和工作行为 “有意义” 的数字化。
    我们的愿景:服务一亿人的数字化办公。


    岗位描述:
    1、代码平台后端大规模服务器集群的分布式架构演进;
    2、服务器计算、存储资源的再平衡、故障修复与隔离,服务器智能运维;
    3、基于分布式存储的下一代代码平台,实现低延迟、高效率在线编码;
    4、Git 核心代码开发,业界趋势跟踪,保持技术领先,优化用户体验等等。


    岗位要求:
    1、3 到 8 年的工作经验,精通 Go 语言、C 语言或 java 语言的一种。
    2、熟悉分布式一致性协议,有分布式系统开发经验。
    3、熟悉微服务架构,RPC 的基本原理、gRPC、pb 等原理和使用,加分。
    4、热爱技术,有较强的学习能力、良好的团队合作能力、抗压能力。
    wikia
        20
    wikia  
       2020-01-06 16:53:11 +08:00
    @rizon 楼主最终找到什么优雅的方案了吗?我正好也遇到一个这样的情况。
    rizon
        21
    rizon  
    OP
       2020-01-13 18:27:10 +08:00
    @wikia #20 把功能砍了,最终就是个简单的转发需求,自己手动实现了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2696 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.