日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot 配置多个请求服务代理

發布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot 配置多个请求服务代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

springboot 配置服務代理

有時候,我們可能有下邊這樣的需求:

即,針對于分布式服務,我們會有多種業務接口服務,但是服務器上可能只要求開放一個服務的端口,比如上圖的restA項目端口是對外開放的,但是restB項目端口并未對外開放,這樣帶來的問題就是,用戶無法直接請求restB項目。
那就想到了可以通過訪問restA ,請求路徑符合一定規范的時候,比如http://ip:port/test ,當請求中以rest 開頭時,可以再轉發請求到restB 項目中即可。

當然代理轉發 ,有很多的解決辦法,nginx 、zuul 等都可以實現,但是nginx 雖然簡單,但是總要多裝一個服務;zuul 配置較為麻煩。
經過百度后,發現了一個特別簡單的配置,即這里要說的東西,ServletRegistrationBean的注入,相當于是引入servlet ,沒有具體看過 。

下面寫一下配置步驟:

1、項目結構及介紹

下面是我的項目結構,以下選中藍色的項目為我們要配置的項目,其他的項目先忽略,是我們基于dubbo 和zookeeper 配置的時候用的。


關于這個項目的介紹是下邊這樣的,再配張圖來介紹下:


上圖中關于suiteoneservice 、suitetwoservice、masterservice 項目是我們的服務接口發布方項目。在這里我只是畫出來,跟我們要配置的內容是無關的。
suiteone 、suitetwo 項目端口沒有外放,用戶不能直接訪問,而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 項目,下載項目之后,分別啟動master 、suiteone 、suitetwo 項目的啟動類,啟動完成后,訪問http://localhost:30000/testone/test/get1 ,即會返回suiteone 項目test/get1 接口的內容。
這種配置對get 、post 請求都有效。
以上即是完整的配置內容。

總結

以上是生活随笔為你收集整理的springboot 配置多个请求服务代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。