热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在重复造轮子的情况下用ProxyServlet反向代理来减少工作量

像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户

像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户使用起来就需要在不同产品工具间来回切换操作,为了提高用户友好性,同时重要的是能够方便的往外推广,这时候就需要打造一个集各个产品的平台,或者说简单点就是弄个统一入口,这个平台提炼了其他各个产品的优点进行整合。新平台说白了只是一个壳子,很多核心功能的实现是在其他各个产品达成的,有现成的接口,新平台的大部分研发工作是对现有的接口进行整合。很多功能的实现只需要调用第三方接口即可,这时候就可以使用反向代理来达到目的,使得新平台的后端工作量极大减少,提高工作效率。比如一整套产品生命周期大致分为:架构设计评审实施、产品研发、代码管理、上线交付、运维监控等等,整个生命周期的维护需要使用到不同的平台,功能发散,不好统一发展,整合之后整条生命线显得清晰明了,用户使用方便,便于规划。

反向代理:服务器收到客户端的请求之后,把请求再转发到内部的其他服务中,收到其他服务的响应之后,把响应返回给客户端。在过程中可能会做一些日志,缓存之类的,比如NG就可以作为一个典型的反向代理服务器,除此之外,在自己实现的服务中可以使用ProxyServlet来达到这样的代理目的。

通过如下案例来看一下在springboot中ProxyServlet是如何使用的

设置两个代理,一个当请求包含/csdn/路径时,将请求转发到https://blog.csdn.net/,一个当请求包含/local/路径时,将请求转发到http://127.0.0.1:8080/

org.mitre.dsmiley.httpproxysmiley-http-proxy-servlet1.9

import org.mitre.dsmiley.httpproxy.ProxyServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ServletConfig {@Beanpublic ServletRegistrationBean

CSNDServletServletRegistrationBean() {ServletRegistrationBean servletRegistratiOnBean= new ServletRegistrationBean(new ProxyServlet(), "/csdn/*");servletRegistrationBean.setName("csnd-proxy");servletRegistrationBean.addInitParameter("targetUri", "https://blog.csdn.net/");servletRegistrationBean.addInitParameter("http.read.timeout", "10000");servletRegistrationBean.addInitParameter("http.socket.timeout", "10000");servletRegistrationBean.addInitParameter("http.connection.request.timeout", "3000");servletRegistrationBean.addInitParameter("log", "true");return servletRegistrationBean;}@Beanpublic ServletRegistrationBean

localServletServletRegistrationBean() {ServletRegistrationBean servletRegistratiOnBean= new ServletRegistrationBean(new ProxyServlet(), "/local/*");servletRegistrationBean.setName("local-proxy");servletRegistrationBean.addInitParameter("targetUri", "http://127.0.0.1:8080/");servletRegistrationBean.addInitParameter("http.read.timeout", "10000");servletRegistrationBean.addInitParameter("http.socket.timeout", "10000");servletRegistrationBean.addInitParameter("http.connection.request.timeout", "3000");servletRegistrationBean.addInitParameter("log", "true");return servletRegistrationBean;}}

启动服务之后来看下效果

可以看出访问http://127.0.0.1:8080/csdn/qq_34485626的效果跟访问https://blog.csdn.net/qq_34485626的效果是一样的,说明代理成功。


http://127.0.0.1:8080/csdn/qq_34485626的效果

 


https://blog.csdn.net/qq_34485626的效果

 

http://127.0.0.1:8080/local/test/proxy和http://127.0.0.1:8080/test/proxy的效果也是一样

@RequestMapping(value = "/test/proxy" , method = RequestMethod.GET)
@ResponseBody
public String proxy() {return "proxy successfully";
}

 

 

 

 

 


推荐阅读
  • 本文探讨了在使用Apache Flink向Kafka发送数据过程中遇到的事务频繁失败问题,并提供了详细的解决方案,包括必要的配置调整和最佳实践。 ... [详细]
  • Web网络基础
    目录儿1使用HTTP协议访问Web2HTTP的诞生2.1因特网的起源2.2互联网、因特网与万维网2.3万维网与HTTP3网络基础TCPIP3.1TCPIP协议族3.2TCPIP的分 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 本文详细探讨了在 Xamarin.Forms 中使用 AbsoluteLayout 进行精确布局的方法,以及如何利用 Device.StartTimer 实现定时任务。通过具体的代码示例,帮助开发者更好地理解和应用这些功能。 ... [详细]
  • 本文探讨了在Node.js环境中如何有效地捕获标准输出(stdout)的内容,并将其存储到变量中。通过具体的示例和解决方案,帮助开发者解决常见的输出捕获问题。 ... [详细]
  • 微信小程序支付官方参数小程序中代码后端发起支付代码支付回调官方参数文档地址:https:developers.weixin.qq.comminiprogramdeva ... [详细]
  • Activity跳转动画 无缝衔接
    Activity跳转动画 无缝衔接 ... [详细]
  • Qt应用开发:创建基本窗口
    本文介绍如何使用Qt框架创建基础窗口的两种方法。第一种方法直接在main函数中创建并显示窗口;第二种方法通过定义一个继承自QWidget的类来实现更复杂的功能。 ... [详细]
  • SecureCRT 使用指南与技巧
    本文详细介绍 SecureCRT 软件的基本功能,并分享了一些实用的操作技巧,旨在帮助用户提高远程管理效率。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • 本文详细介绍了Keycloak框架中UserRepresentation类下的isEnabled()方法的功能与应用,并通过多个实际代码示例说明其在用户管理中的具体实现。 ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 实现一个具有动画效果的手风琴组件,包括代码示例和实现原理。 ... [详细]
  • 本文详细介绍了如何通过配置 Chrome 和 VS Code 来实现对 Vue 项目的高效调试。步骤包括启用 Chrome 的远程调试功能、安装 VS Code 插件以及正确配置 launch.json 文件。 ... [详细]
author-avatar
啊啦哈200601
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有