spring boot 여러 요청 서비스 에이전트 의 전체 절 차 를 설정 합 니 다.

springboot 설정 서비스 에이전트
가끔 우 리 는 다음 과 같은 수요 가 있 을 수 있다.

즉,분포 식 서비스 에 대해 저 희 는 다양한 업무 인터페이스 서 비 스 를 제공 할 수 있 습 니 다.그러나 서버 에서 하나의 서비스 포트 만 개방 하 라 고 요구 할 수 있 습 니 다.예 를 들 어 위의 restA 프로젝트 포트 는 대외 적 으로 개방 되 었 지만 restB 프로젝트 포트 는 대외 적 으로 개방 되 지 않 았 습 니 다.이런 문 제 는 사용자 가 restB 프로젝트 를 직접 요청 할 수 없다 는 것 입 니 다.
restA 를 방문 하여 요청 경로 가 일정한 규범 에 부합 할 때,예 를 들 어http://ip:port/test ,요청 중 rest 로 시작 할 때 restB 프로젝트 에 요청 을 다시 전송 하면 됩 니 다.
물론 대리 리 트 윗 은 많은 해결 방법 이 있 습 니 다.nginx,zuul 등 이 모두 실현 할 수 있 지만 nginx 는 간단 하지만 하나의 서 비 스 를 더 설치 해 야 합 니 다.zuul 설정 이 귀 찮 습 니 다.
바 이 두 를 거 친 후에 여기 서 말 하고 자 하 는 것 을 발 견 했 습 니 다.ServletRegistration Bean 의 주입 은 servlet 를 도입 하 는 것 과 같 습 니 다.구체 적 으로 보지 못 했 습 니 다.
다음은 설정 절 차 를 쓰 겠 습 니 다.
1.프로젝트 구조 및 소개
다음은 제 프로젝트 구조 입 니 다.아래 에 파란색 항목 을 선택 하면 저희 가 설정 할 항목 입 니 다.다른 항목 은 무시 합 니 다.저희 가 dubbo 와 zookeeper 를 기반 으로 설정 할 때 사용 합 니 다.
프로젝트 를 GitHub 에 올 렸 습 니 다.프로젝트 를 다운로드 하 십시오GitHub 주소 
 
이 프로젝트 에 대한 소 개 는 아래 와 같 습 니 다.그리고 그림 을 곁들여 소개 하 겠 습 니 다.

위의 그림 에서 suite one service,suite to service,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 을 대응 하 는 프 록 시 경로 로 바 꾸 는 것 입 니 다.*실제 요청 항목 의 인터페이스 경로 입 니 다!!!
300001 포트 는 suite one 프로젝트 이 고 300002 포트 는 suite two 프로젝트 입 니 다.프로젝트 를 다운로드 한 후에 각각 master,suite one,suite two 프로젝트 의 시작 류 를 시작 하고 시작 이 완료 되면 방문 합 니 다.http://localhost:30000/testone/test/get1 suite one 프로젝트 test/get1 인터페이스의 내용 을 되 돌려 줍 니 다.
이 설정 은 get,post 요청 에 모두 유효 합 니 다.
이상 은 완전한 설정 내용 입 니 다.
모 르 는 것 이 있 으 면 항목 을 다운로드 해서 볼 수 있 습 니 다GitHub 주소
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기