Spring Cloud Netflix Zuul 프록시 게이트웨이를 사용하여 백엔드 REST 서비스에 액세스하는 구현(코드)
이 기사의 내용은 Spring Cloud Netflix Zuul 프록시 게이트웨이를 사용하여 백엔드 REST 서비스에 액세스하는 구현(코드)에 대한 내용입니다. 필요한 친구가 참고할 수 있기를 바랍니다. .
1. 개요
이 기사에서는 서로 별도로 배포되는 프런트엔드 애플리케이션과 백엔드 REST API 서비스 간의 통신 방법을 살펴보겠습니다. 목적은 브라우저의 도메인 간 리소스 액세스 및 동일 출처 정책 제한을 해결하여 페이지 UI가 동일한 서버에 있지 않더라도 백그라운드 API를 호출할 수 있도록 하는 것입니다.
여기서 UI 애플리케이션과 간단한 REST API라는 두 개의 별도 애플리케이션을 만들었습니다. UI 애플리케이션에서 Zuul 프록시를 사용하여 REST API에 대한 호출을 프록시할 것입니다. Zuul은 Netflix의 JVM 기반 라우터이자 서버측 로드 밸런서입니다. Spring Cloud는 내장된 Zuul 프록시와 훌륭하게 통합됩니다.
2.REST 애플리케이션
우리의 REST API 애플리케이션은 간단한 Spring Boot 애플리케이션입니다. 이 문서에서는 서버에 배포된 API가 포트 8081에서 실행됩니다.
구성 파일
server.contextPath=/spring-zuul-foos-resourceserver.port=80 81
사용할 리소스에 대한 기본 DTO를 정의하는 것부터 시작해 보겠습니다.
public class Foo { private long id; private String name; // standard getters and setters }
간단한 컨트롤러 정의:
@Controllerpublic class FooController { @RequestMapping(method = RequestMethod.GET, value = "/foos/{id}") @ResponseBody public Foo findById( @PathVariable long id, HttpServletRequest req, HttpServletResponse res) { return new Foo(Long.parseLong(randomNumeric(2)), randomAlphabetic(4)); } }
3. 프런트 엔드 애플리케이션
UI 애플리케이션도 간단한 Spring Boot 애플리케이션입니다. 이 문서에서는 애플리케이션이 포트 8080에서 실행되고 있습니다.
먼저 UI 애플리케이션의 pom에 Spring Cloud를 통한 zuul 지원에 대한 종속성을 추가해야 합니다. yml에서 수행하세요.
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>
참고:
- 리소스 서버 Foos를 프록시합니다.
- UI에서 "/foos/"로 시작하는 모든 요청은 Foos 리소스 서버(http://loclahost:8081/spring-zuul-foos-resource/foos/
zuul: routes: foos: path: /foos/** url: http://localhost:8081/spring-zuul-foos-resource/foos
여기서 가장 중요한 측면은 상대 URL을 사용하여 API에 액세스하는 방법입니다!
API 애플리케이션은 UI 애플리케이션과 동일한 서버에 배포되지 않으므로 상대 URL은 작동하지 않으며 프록시 없이는 작동하지 않습니다.그러나 프록시를 통해 우리는 이러한 요청을 API가 실제로 배포된 위치로 라우팅하도록 구성된 Zuul 프록시를 통해 Foo 리소스에 액세스합니다.
마지막으로 부팅 가능 애플리케이션:
<html> <body ng-app="myApp" ng-controller="mainCtrl"> <script src="angular.min.js"></script> <script src="angular-resource.min.js"></script> <script> var app = angular.module('myApp', ["ngResource"]); app.controller('mainCtrl', function($scope,$resource,$http) { $scope.foo = {id:0 , name:"sample foo"}; $scope.foos = $resource("/foos/:fooId",{fooId:'@id'}); $scope.getFoo = function(){ $scope.foo = $scope.foos.get({fooId:$scope.foo.id}); } });</script><p> <h1 id="Foo-nbsp-Details">Foo Details</h1> <span>{{foo.id}}</span> <span>{{foo.name}}</span> <a href="#" ng-click="getFoo()">New Foo</a> </p> </body> </html>
이는 @EnableZuulProxy 주석을 사용하여 매우 깔끔하고 간결한 Zuul 프록시를 시작합니다.
4. 테스트 실행
두 응용 프로그램 시스템을 각각 시작하고 브라우저에 http://localhost:8080/index를 입력합니다.
"New Foo" 버튼을 클릭할 때마다 백그라운드 REST API에 액세스합니다. 5. 사용자 정의 Zuul 필터
사용 가능한 Zuul 필터가 여러 개 있으며, 자체 사용자 정의 필터를 만들 수도 있습니다.
@EnableZuulProxy@SpringBootApplicationpublic class UiApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(UiApplication.class, args); } }
이 간단한 필터는 요청의 속성에 "Test"라는 헤더를 추가합니다. - 물론, 필요에 따라 요청을 늘릴 수 있습니다.
6. 사용자 정의 Zuul 필터 테스트
마지막으로 테스트하여 사용자 정의 필터가 작동하는지 확인하겠습니다. 먼저 Foos 리소스 서버에서 FooController를 수정하겠습니다.
@Componentpublic class CustomZuulFilter extends ZuulFilter { @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); ctx.addZuulRequestHeader("Test", "TestSample"); return null; } @Override public boolean shouldFilter() { return true; } // ...}
이제 테스트해 보겠습니다. 다음을 살펴보세요.
@Controllerpublic class FooController { @GetMapping("/foos/{id}") @ResponseBody public Foo findById( @PathVariable long id, HttpServletRequest req, HttpServletResponse res) { if (req.getHeader("Test") != null) { res.addHeader("Test", req.getHeader("Test")); } return new Foo(Long.parseLong(randomNumeric(2)), randomAlphabetic(4)); } }
7. 결론
이 게시물에서는 Zuul을 사용하여 UI 애플리케이션에서 REST API로 요청을 라우팅하는 데 중점을 두었습니다. 우리는 CORS 및 동일 출처 정책을 성공적으로 해결했으며 전송 중인 HTTP 요청을 사용자 정의하고 강화했습니다.
관련 권장사항:
spring cloud Feign은 HTTP를 사용하여 원격 서비스를 요청합니다.spring-cloud-sleuth+zipkin 추적 서비스 구현(2)위 내용은 Spring Cloud Netflix Zuul 프록시 게이트웨이를 사용하여 백엔드 REST 서비스에 액세스하는 구현(코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











엔터프라이즈 애플리케이션의 복잡성이 계속 증가함에 따라 점점 더 많은 기업이 애플리케이션을 여러 마이크로서비스로 분할하고 마이크로서비스 간의 협업을 통해 전체 비즈니스 프로세스를 완료하기 시작했습니다. 이러한 아키텍처 접근 방식은 애플리케이션을 더욱 안정적이고 확장 가능하게 만들 수 있지만 로드 밸런싱, 서비스 검색 등과 같은 몇 가지 새로운 문제도 발생합니다. 이 기사에서는 Spring Cloud를 사용하여 마이크로서비스 아키텍처의 로드 밸런싱 문제를 해결하는 방법을 소개합니다. 로드 밸런싱이란 무엇입니까? 로드 밸런싱(LoadBalancing)은 여러 서버와 네트워크의 균형을 유지하는 것을 말합니다.

개인적으로 소스코드를 읽기 위해서는 먼저 사용할 수 있어야 한다고 생각하며, 익숙해지면 다른 사람들이 어떻게 구현했는지 짐작할 수 있습니다. 관련 공식 문서가 있으면 공식 문서를 읽어보세요.

인터넷의 발전과 기술의 지속적인 업데이트로 인해 기존의 단일 애플리케이션은 더 이상 사용자 요구를 충족할 수 없으며 마이크로서비스라는 개념이 등장했습니다. SpringCloud는 Pivotal에서 출시한 마이크로서비스 개발 툴킷으로 개발자에게 마이크로서비스 아키텍처 애플리케이션을 구축, 배포 및 관리할 수 있는 매우 편리한 방법을 제공합니다. 본 글에서는 SpringCloud의 개념과 아키텍처, 마이크로서비스 개발 프로세스,

인터넷의 급속한 발전으로 인해 기업 수준의 애플리케이션은 날로 복잡해지고 있습니다. 이러한 상황에 대응하여 마이크로서비스 아키텍처가 탄생했습니다. 모듈성, 독립적 배포 및 높은 확장성을 통해 오늘날 엔터프라이즈 수준 애플리케이션 개발을 위한 첫 번째 선택이 되었습니다. 뛰어난 마이크로서비스 아키텍처인 Spring Cloud는 실제 애플리케이션에서 큰 이점을 보여왔습니다. 이 기사에서는 SpringCloud 마이크로서비스 아키텍처의 배포, 운영 및 유지 관리에 대해 소개합니다. 1. SpringCloud 마이크로서비스 아키텍처 배포 SpringCloud

Java를 사용하여 Spring Cloud Kubernetes 기반 컨테이너 오케스트레이션 애플리케이션을 개발하는 방법 컨테이너 기술이 개발되고 널리 적용됨에 따라 컨테이너 오케스트레이션 도구는 개발자에게 없어서는 안 될 부분이 되었습니다. 가장 널리 사용되는 컨테이너 오케스트레이션 도구 중 하나인 Kubernetes는 업계 표준이 되었습니다. 이러한 맥락에서 Spring Cloud와 Kubernetes를 결합하면 컨테이너 오케스트레이션을 기반으로 애플리케이션을 쉽게 개발할 수 있습니다. 이번 글에서는 자세히 소개하겠습니다

Java 언어의 SpringCloud 프레임워크 소개 클라우드 컴퓨팅과 마이크로서비스의 인기로 인해 SpringCloud 프레임워크는 Java 언어로 클라우드 네이티브 애플리케이션을 구축하는 데 선호되는 프레임워크 중 하나가 되었습니다. 이 기사에서는 Spring Cloud 프레임워크의 개념과 기능을 소개하고 Spring Cloud를 사용하여 마이크로서비스 아키텍처를 구축하는 방법을 소개합니다. SpringCloud 소개 SpringCloud 프레임워크는 SpringBoot를 기반으로 하는 마이크로서비스 프레임워크입니다. 그것은

마이크로서비스 아키텍처의 인기로 인해 점점 더 많은 엔터프라이즈 개발 팀이 Spring Cloud를 사용하여 자체 마이크로서비스 시스템을 구축하기 시작했습니다. 분산 환경에서 분산 잠금을 구현하는 것은 중요한 기술적 과제입니다. 이 기사에서는 Spring Cloud 프레임워크에서 분산 잠금의 마이크로서비스 방식을 구현하는 방법을 소개합니다. 먼저 분산 잠금이 무엇인지 이해해야 합니다. 분산 잠금은 공유 리소스에 대한 액세스를 보호하는 데 사용되는 기술로, 분산 환경에서 여러 노드가 동시에 동일한 리소스를 수정하거나 수정하지 않도록 할 수 있습니다.

마이크로서비스 아키텍처가 널리 적용됨에 따라 효과적으로 모니터링하고 경고하는 방법은 개발자와 운영 및 유지 관리 담당자가 직면한 문제 중 하나가 되었습니다. 이 기사에서는 SpringCloud 마이크로서비스 아키텍처에서 모니터링 및 경보를 실행하는 구체적인 방법에 중점을 둘 것입니다. 1. 모니터링 지표 선택 모니터링에 앞서 먼저 모니터링해야 할 지표를 결정해야 합니다. 일반적인 지표에는 CPU 사용률, 메모리 사용량, 네트워크 대역폭, 디스크 공간, HTTP 요청 응답 시간, 서비스 호출 수 및 대기 시간 등이 포함됩니다. 이러한 지표는 다양한 모니터링 도구를 통해 사용할 수 있습니다.
