亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在spring boot中配置多個請求服務代理

發布時間:2021-05-25 16:37:28 來源:億速云 閱讀:234 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關怎么在spring boot中配置多個請求服務代理,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

springboot 配置服務代理

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

怎么在spring boot中配置多個請求服務代理

即,針對于分布式服務,我們會有多種業務接口服務,但是服務器上可能只要求開放一個服務的端口,比如上圖的restA項目端口是對外開放的,但是restB項目端口并未對外開放,這樣帶來的問題就是,用戶無法直接請求restB項目。

那就想到了可以通過訪問restA ,請求路徑符合一定規范的時候,比如http://ip:port/test ,當請求中以rest 開頭時,可以再轉發請求到restB 項目中即可。

當然代理轉發 ,有很多的解決辦法,nginx 、zuul 等都可以實現,但是nginx 雖然簡單,但是總要多裝一個服務;zuul 配置較為麻煩。

經過百度后,發現了一個特別簡單的配置,即這里要說的東西,ServletRegistrationBean的注入,相當于是引入servlet ,沒有具體看過 。

下面寫一下配置步驟:

1、項目結構及介紹

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

項目已放到GitHub 上,下載項目GitHub地址 

怎么在spring boot中配置多個請求服務代理 

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

怎么在spring boot中配置多個請求服務代理

上圖中關于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;
/**
 * Created by lsf on 2018/7/31.
 */
@Configuration
public class ProxyServletConfiguration implements EnvironmentAware {
 @Bean
 public 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;
 }

 @Bean
 public 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;

 @Override
 public 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:30002

上邊的配置簡單介紹一下,對于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是什么

springboot一種全新的編程規范,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。

以上就是怎么在spring boot中配置多個請求服務代理,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东安县| 成安县| 玛纳斯县| 民县| 岑溪市| 象州县| 弋阳县| 锡林郭勒盟| 勃利县| 新津县| 石景山区| 民乐县| 泰来县| 罗甸县| 镇赉县| 乐至县| 乾安县| 秭归县| 九龙坡区| 都兰县| 富裕县| 宁陵县| 兴义市| 临泽县| 定西市| 象州县| 柘城县| 双峰县| 休宁县| 海阳市| 莒南县| 萝北县| 普洱| 陆川县| 金华市| 福建省| 望都县| 永胜县| 博爱县| 宁蒗| 垫江县|