springboot 配置多个请求服务代理

springboot 配置服务代理

有时候,我们可能有下边这样的需求:
这里写图片描述
即,针对于分布式服务,我们会有多种业务接口服务,但是服务器上可能只要求开放一个服务的端口,比如上图的restA项目端口是对外开放的,但是restB项目端口并未对外开放,这样带来的问题就是,用户无法直接请求restB项目。
那就想到了可以通过访问restA ,请求路径符合一定规范的时候,比如http://ip:port/test ,当请求中以rest 开头时,可以再转发请求到restB 项目中即可。

当然代理转发 ,有很多的解决办法,nginxzuul 等都可以实现,但是nginx 虽然简单,但是总要多装一个服务;zuul 配置较为麻烦。
经过百度后,发现了一个特别简单的配置,即这里要说的东西,ServletRegistrationBean的注入,相当于是引入servlet ,没有具体看过 。

下面写一下配置步骤:

1、项目结构及介绍

下面是我的项目结构,以下选中蓝色的项目为我们要配置的项目,其他的项目先忽略,是我们基于dubbozookeeper 配置的时候用的。

这里写图片描述
关于这个项目的介绍是下边这样的,再配张图来介绍下:

这里写图片描述
上图中关于suiteoneservicesuitetwoservicemasterservice 项目是我们的服务接口发布方项目。在这里我只是画出来,跟我们要配置的内容是无关的。
suiteonesuitetwo 项目端口没有外放,用户不能直接访问,而master项目是可以直接访问的,所以用户是通过访问master 项目,再由master 项目对请求代理转发到这两个项目中。

2、具体配置步骤

主要的配置很少,都在master 项目中。

(1)引入依赖:
 <!--ProxyFilter的引入依赖--><dependency><groupId>org.mitre.dsmiley.httpproxy</groupId><artifactId>smiley-http-proxy-servlet</artifactId><version>1.7</version></dependency>
(2)、配置一个配置类:

该类可以参照下载下来的,master 项目中的配置。

package microservice.sc.config;import org.mitre.dsmiley.httpproxy.ProxyServlet;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;@Configuration
public class ProxyServletConfiguration implements EnvironmentAware {@Beanpublic ServletRegistrationBean servletRegistrationBean(){ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), propertyResolver.getProperty("servlet_url_one"));//这个setName必须要设置,并且多个的时候,名字需要不一样servletRegistrationBean.setName("suitone");servletRegistrationBean.addInitParameter("targetUri", propertyResolver.getProperty("target_url_one"));servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, propertyResolver.getProperty("logging_enabled", "false"));return servletRegistrationBean;}@Beanpublic ServletRegistrationBean servletRegistrationBean2(){ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), propertyResolver.getProperty("servlet_url_two"));//这个setName必须要设置,并且多个的时候,名字需要不一样servletRegistrationBean.setName("suittwo");servletRegistrationBean.addInitParameter("targetUri", propertyResolver.getProperty("target_url_two"));servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, propertyResolver.getProperty("logging_enabled", "false"));return servletRegistrationBean;}private RelaxedPropertyResolver propertyResolver;@Overridepublic void setEnvironment(Environment environment) {this.propertyResolver = new RelaxedPropertyResolver(environment, "proxy.test.");}
}
(3)、配置代理地址:

master 项目的主配置文件,即application.properties 文件中,加入以下内容:

#请求testone时代理转发到30001项目中
proxy.test.servlet_url_one=/testone/*
proxy.test.target_url_one=http://localhost:30001#请求testtwo时代理转发到30002项目中
proxy.test.servlet_url_two=/testtwo/*
proxy.test.target_url_two=http://localhost:300021234567

上边的配置简单介绍一下,对于testone/* 这样的写法,意思就是当你的请求路径以testone 开头,比如http://localhost:30000/testone/test/get1 这样的路径,它请求的真实路径是http://localhost:30001/test/get1 。主要就是将testone 替换成对应的被代理路径而已,\* 的意思就是实际请求项目中接口的路径!!!
30001 端口即suiteone项目,30002 端口即suitetwo 项目,下载项目之后,分别启动mastersuiteonesuitetwo 项目的启动类,启动完成后,访问http://localhost:30000/testone/test/get1 ,即会返回suiteone 项目test/get1 接口的内容。
这种配置对getpost 请求都有效。
以上即是完整的配置内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主板上的jrgb接口干什么用_用思维导图,解读选配主板的过程,重点解读兼容与接口的搭配技术...

本文用思维导图&#xff0c;解读选配主板的过程&#xff0c;重点解读兼容与接口的搭配技术&#xff0c;选择了5块不同主板&#xff0c;说明主板内容。重点提示&#xff0c;主板决定一台计算机能否稳定运行。任务描述&#xff1a;重点解读兼容与接口的搭配技术,解读选配主板的过…

Linux启动Mysql

关于Linux上安装Mysql可以查看之前的博客&#xff1a;https://blog.csdn.net/qq_43842093/article/details/120401076 Linux启动Mysql 下查看mysql服务的两种方式&#xff1a; 方式一&#xff1a; [rootlocalhost bin]ps -ef|grep mysql方式二&#xff1a; [rootlocalhost…

springboot配置shiro多项目实现session共享的详细步骤

springboot配置shiro多项目实现session共享的详细步骤 公司需要这样的需求&#xff1a; 有两个项目master 主项目、suiteone 项目&#xff0c;两个项目各自由shiro 安全框架管理&#xff0c;当不能登录时&#xff0c;都无法访问&#xff0c;但当登录了其中一个&#xff0c;再…

shiro框架---关于多项目之间验证为什么需要共享session

关于多项目之间登录验证为什么需要共享session 服务器上部署了两个项目&#xff0c;登录之后才可以访问其中的接口。现在想要实现&#xff0c;当登录项目1成功后&#xff0c;可以不需要再登录项目2&#xff0c;直接可以访问项目2中的接口。 大部分人都会想到&#xff0c;共享s…

怎么黑学校计算机室的电脑,大学计算机室变身黑网吧 校方:有需求

河南经贸职业学院计算机房在课间向学生收费办卡使用&#xff0c;被指变相开设“网吧”&#xff0c;一些学生痴迷于网络游戏中。对此&#xff0c;校方向记者表示&#xff1a;“上课时间不收费&#xff0c;课外时间有偿使用&#xff0c;学生有上网需求。”计算机房向学生收费玩游…

Linux重置Mysql密码_解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost

Linux重置Mysql密码 一般这个错误是由密码错误引起&#xff0c;解决的办法自然就是重置密码。 假设我们使用的是root账户。 1.重置密码的第一步就是跳过MySQL的密码认证过程&#xff0c;方法如下&#xff1a; #vim /etc/my.cnf(注&#xff1a;windows下修改的是my.ini) 在…

excel 公式 平移 引用单元格_不学会这3个Excel隔列求和函数公式,你只能一个个单元格去相加...

Excel中的求和&#xff0c;并不是你们想的123那么简单。有单条件求和、多条件求和&#xff0c;合并单元格求和&#xff0c;隔列求和等等。有关求和的函数也很多&#xff0c;例如SUM函数、SUMIFS函数、还有与这两个函数结合使用的其它函数等等&#xff0c;不知道你们了解了多少。…

Linux - 查看软件安装与安装路径

【1】查看软件是否安装 因为linux安装软件的方式比较多&#xff0c;所以没有一个通用的办法能查到某些软件是否安装了。总结起来就是这样几类&#xff1a; ① rpm包安装的&#xff0c;可以用rpm -qa看到&#xff0c;如果要查找某软件包是否安装&#xff0c;用 rpm -qa | grep…

计算机mips是什么,在计算机术语中,什么叫MIPS

2006-08-18在计算机术语中,什么叫VGA显卡所处理的信息最终都要输出到显示器上&#xff0c;显卡的输出接口就是电脑与显示器之间的桥梁&#xff0c;它负责向显示器输出相应的图像信号。CRT显示器因为设计制造上的原因&#xff0c;只能接受模拟信号输入&#xff0c;这就需要显卡能…

springboot配置多项目下统一切换不同环境变量profile办法

springboot配置多项目下统一切换不同环境变量profile办法 springboot 适合于微服务那种多项目开发&#xff0c;每一个小项目就是一个springboot 项目&#xff0c;比如我们这样&#xff1a; 问题发生&#xff1a; 我们知道springboot 项目中的配置文件application.propertie…

springboot 关于 Class path contains multiple SLF4J bindings.警告的解决

springboot 关于 Class path contains multiple SLF4J bindings.警告的解决 有一次配置好springboot项目启动后&#xff0c;忽然发现有下边的警告&#xff1a; SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/E:/mavenJarOnline/c…

c# 计算机ip,C# 获取电脑的IP,网关,MAC,计算机名。。

【实例简介】【实例截图】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.Net.Sockets;us…

wxml 判断 小程序_如何判断小程序外包公司是否靠谱

微信小程序依附微信App&#xff0c;由于其无需下载&#xff0c;无需安装&#xff0c;无需注册&#xff0c;直接用微信授权登录&#xff0c;不占内存等优势在短短2年多的时间斩获超过10亿用户。又因为微信官方开通了小程序附近五公里展示以及在微信搜一搜增加“小程序”搜索选项…

make *** 没有指明目标并且找不到 makefile。 停止。_Makefile目标文件搜索(VPATH和vpath)...

我们都知道一个工程文件中的源文件有很多&#xff0c;并且存放的位置可能不相同(工程中的文件会被放到不同的目录下)&#xff0c;所以按照之前的方式去编写 Makefile 会有问题。我们之前列举的例子&#xff0c;所有的源文件基本上都是存放在与 Makefile 相同的目录下。只要依赖…

电脑设置访问苹果服务器未响应,苹果连接电脑没反应,教您苹果连接电脑没反应怎么解决...

但只要是电子设备&#xff0c;那就一定会出现问题&#xff0c;所以苹果手机也不能例外。不过小编我有想好解决的方法&#xff0c;并且我已经将解决苹果手机连接电脑没反应的方法写在了文章的后面&#xff0c;小伙伴们往下看即可。苹果手机作为手机品牌界的翘楚&#xff0c;它一…

Linux下netstat命令详解

一、介绍 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具&#xff0c;它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用于检验本机各端口的网络连接情况。 二、输出…

hbase可视化工具_做数据可视化,三大热门BI工具试用总结

什么BI分析工具好用&#xff1f;今天通过3款BI产品Power BI、FineBI、亿信ABI为范例&#xff0c;进行对比分析。一、产品背景Power BI是微软的&#xff0c;14年15年开始初见苗头&#xff0c;之前主要是基于Excel的高级功能&#xff0c;包括Power Query&#xff0c;Power Pivot&…

IDEA Translation插件安装及设置鼠标悬浮提示的自动翻译

1、安装插件 Translation 2.设置鼠标悬浮提示 3.在代码界面鼠标悬停在方法上 就会自动翻译提示

在虚拟机中ftp服务器的配置,ftp服务器在虚拟机中配置文件

ftp服务器在虚拟机中配置文件 内容精选换一换由于主机中 /etc/ssh/sshd_config 配置文件中对服务器与客户端交互的活动心跳时间做出了限制&#xff0c;所以在一个ansible任务中如果在“规定时间”中主机没有任何响应则ssh服务断开(注&#xff1a;上述“规定时间”是指在/etc/ss…

@PostConstruct注解详解

简介 javaEE5引入了PostConstruct和PreDestroy两个作用于Servlet生命周期的注解&#xff0c;实现Bean初始化之前和销毁之前的自定义操作 使用场景 在项目中主要是在Servlet初始化之前加载一些缓存数据等 API使用说明 PostConstruct 注释用于在依赖关系注入完成之后需要执行…