SpringBoot+Eureka 마이크로 서비스 부하 균형 을 실현 하 는 예제 코드
22187 단어 SpringBootEureka부하 균형
Spring Boot 는 현재 가장 핫 한 웹 프레임 워 크 입 니 다.그렇다면 유레카 와 는 어떤 연관 이 있 을 까?
4.567917.Eureka 는 넷 플 릭 스 가 시작 한 RESTful 서비스 로 주로 서비스의 등록 발견 에 사용 된다4.567917.Eureka 는 두 가지 구성 요소 로 구성 되 어 있 습 니 다.Eureka 서버 와 Eureka 클 라 이언 트 입 니 다.Eureka 서버 는 서비스 등록 서버 로 사 용 됩 니 다4.567917.Eureka 클 라 이언 트 는 자바 클 라 이언 트 로 서버 와 의 상호작용 을 간소화 하고 폴 링 부하 이퀄 라이저 로 서 서비스의 고장 전환 지원 을 제공 합 니 다넷 플 릭 스 는 생산 환경 에서 다른 클 라 이언 트 를 사용 하 는데 데이터,자원 이 용 률 과 오류 상 태 를 바탕 으로 하 는 가중 부하 균형 을 제공한다2.먼저 Eureka-server 서비스 등록 센터 를 만 듭 니 다.
spring-cloud 의 Eureka 모듈 을 사용 해 야 합 니 다.그 는 서비스의 등록 과 발견 모듈 입 니 다.
그림 에서 보 듯 이 우 리 는 먼저 Spring-boot 프로젝트 를 Eureka 서버 에 도입 합 니 다.
다음>>>>완료
구 축 된 Eureka-server 의 pom.xml 코드 를 살 펴 보 겠 습 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.eureka</groupId>
<artifactId>server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RC2</spring-cloud.version>
</properties>
<dependencies>
<!-- Eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
우 리 는 이곳 이 일반적인 Spring-boot 프로젝트 와 달리 Eureka-server 가방 을 인용 한 것 을 보 았 다.그럼 우 리 는 그것 을 어떻게 사용 합 니까?어떻게 시작 합 니까?
여기 주석 하나만 시작 하면 됩 니 다.Spring-boot 프로젝트 의 시작 클래스 에>>>>>>>@EnableEureka Server 를 추가 합 니 다.
코드 는 다음 과 같 습 니 다:
package com.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
*
*/
@EnableEurekaServer
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
하마터면 잊 을 뻔 했 어 요.application.yml 을 설정 해 야 해 요.Eureka 는 사용 가능 한 구성 요소 입 니 다.모든 인 스 턴 스 를 등록 한 후에 등록 센터 에 심 박 수 를 보 내야 합 니 다.기본 적 인 상황 에서 erureka server 도 eureka client 이 므 로 server 를 지정 해 야 합 니 다.
eureka server 설정 파일 app.yml:
server:
port: 8081 #
eureka:
instance:
hostname: 127.0.0.1 # IP
client:
registerWithEureka: false #
fetchRegistry: false #
serviceUrl: # ,
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
시동 걸 어 볼 까요?브 라 우 저 에 입력 합 니 다.http://127.0.0.1:8081/비행기 가 직행한다
우 리 는 그것 의 시각 화 인터페이스 를 볼 수 있다.
세심 한 친 구 는 이곳 에서 서 비 스 를 발견 하지 못 했다 는 것 을 알 게 될 것 이다??No instance available
why? 저희 가 아직 서비스 가 없어 서 등록 센터 에 서 비 스 를 등록 하지 않 아서 찾 을 수가 없어 요.
3.먼저 Eureka-Client 클 라 이언 트,즉 서비스 제공 자 를 만 듭 니 다.
클 라 이언 트 가 등록 센터 에 호스트 와 포트,URL,홈 페이지 등 메타 데 이 터 를 제공 합 니 다.Eureka server 는 모든 client 인 스 턴 스 로부터 심장 박동 메 시 지 를 받 습 니 다.심장 박동 이 시간 을 초과 하면 이 인 스 턴 스 를 등록 server 에서 삭제 합 니 다.
클 라 이언 트 를 만 드 는 것 은 서버 와 차이 가 많 지 않 습 니 다.시작 설명 만 다 르 고 yml 설정 파일 도 있 습 니 다.
Next>>>Finish 가 완성 되 었 습 니 다.
열 면 pom.xml 이 서버 등록 센터 와 유사 합 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.eureka</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>provider</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RC2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
클 라 이언 트 라 는 걸 어떻게 증명 해 요?간단 하 다
Spring-boot 의 시작 클래스 에 주석@EnableEureka Client 를 통 해 자신 이 eureka client 임 을 표시 합 니 다.
package com.eureka.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* Eureka
*/
@RestController
@EnableEurekaClient
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
/**
* getUser
* @return
*/
@GetMapping(value = "/getUser")
@ResponseBody
public Map<String,Object> getUser(@RequestParam Integer id){
Map<String,Object> data = new HashMap<>();
data.put("id",id);
data.put("userName","admin");
data.put("from","provider-A");
return data;
}
}
@EnableEurekaClient 를 추 가 했 지만 뭔 가 뻔 한 것 같 아 요.참,프로필 yml.
eureka:
client:
serviceUrl: #
defaultZone: http://127.0.0.1:8081/eureka/
server:
port: 8082 #
spring:
application:
name: service-provider # --
시동 걸 어 볼 까요?우 리 는 이 클 라 이언 트 가 이미 등록 센터 에 서 비 스 를 등록 한 것 을 보 았 다.그러면 우 리 는 Eureka-server 비행 기 를 열 어 직항 한다.
저희 가 시작 한 서비스 가 들 어 가 는 걸 봤 어 요.
우리 서비스 넣 은 거 봤 지?
그럼 누가 물 어 볼 거 야.등 록 된 서 비 스 는 모두 사용 가능 하기 때문에 여 기 는 하나의 서비스 만 감지 되 고 발생 하 는 경고 만 감지 되 며 사용 에 영향 을 주지 않 습 니 다.다음 에 우리 가 여러 개의 인 스 턴 스 를 시작 하면 그렇지 않 을 것 입 니 다.
클 라 이언 트 의 방법 이 사용 가능 한 지 먼저 테스트 해 보 겠 습 니 다.http://127.0.0.1:8082/getUser?id=1
분명히 문제 가 없 는 것 같 습 니 다.그러면 우 리 는 서 비 스 를 잘 제 공 했 습 니 다.sei 는 소 비 를 합 니까?
다음은 저희 가 소비 자 를 만 들 겠 습 니 다.
더 간단 하고 알 기 쉽게 하기 위해 서 나 는 한 걸음 한 걸음 그림 을 내 는 것 이 좋 겠 다.
자,pom.xml 붙 여 주세요.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.eureka</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>consumer</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RC2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
주로 시동 류 입 니 다.내용 이 풍부 합 니 다.모두 주석 에 있 습 니 다.
package com.eureka.consumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
/**
* Eureka -
*/
@RestController
@EnableEurekaClient
@SpringBootApplication
public class ConsumerApplication {
@Autowired
RestTemplate restTemplate;
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
/**
* RestTemplate
* @return
*/
@LoadBalanced
@Bean
public RestTemplate rest() {
return new RestTemplate();
}
/**
* Rest RestTemplate http , ----gotoUser getUser
* @param id
* @return
*/
@GetMapping(value = "/gotoUser")
@ResponseBody
public Map<String,Object> getUser(@RequestParam Integer id){
Map<String,Object> data = new HashMap<>();
/**
* , http://service-provider
* http://127.0.0.1:8082/
* , service-provider, service-provider
*/
data = restTemplate.getForObject("http://service-provider/getUser?id="+id,Map.class);
return data;
}
}
프로필 과
eureka:
client:
serviceUrl: #
defaultZone: http://127.0.0.1:8081/eureka/
server:
port: 8083 #
spring:
application:
name: service-consumer # --
시동 걸 어 볼 까요?우리 공급 자 와 소비자 가 다 들 어 왔 는 지.
그럼 우리 소비자 들 의 방법 이 비행기 로 직항 할 수 있 는 지 살 펴 보 자.
하하,신기 하지?
더 신기 한 것 을 소개 한다--마이크로 서비스 부하 균형 실현
우 리 는 서비스 제공 자 를 하나의 공 사 를 복사 해서 부하 균형 을 이 룰 수 있 는 지 작은 수정 을 해 보 겠 습 니 다.
우 리 는 두 개의 서 류 를 수정 해 야 한다.
하 나 는 시동 류 인 데 어떤 것 을 바 꿨 나 요?보면 알 겠 지.
package com.eureka.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* Eureka
*/
@RestController
@EnableEurekaClient
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
/**
* getUser
* @return
*/
@GetMapping(value = "/getUser")
@ResponseBody
public Map<String,Object> getUser(@RequestParam Integer id){
Map<String,Object> data = new HashMap<>();
data.put("id",id);
data.put("userName","admin");
data.put("from","provider-B");//
return data;
}
}
그리고 yml 프로필.
eureka:
client:
serviceUrl: #
defaultZone: http://127.0.0.1:8081/eureka/
server:
port: 8088 # --
spring:
application:
name: service-provider # -- -- ,
시동 걸 어 볼 까요?Eureka-server 백 스테이지 의 효 과 를 보 세 요.ServerA ServerB.
이거 서비스 프로 바 이 더 라 고 하 는데 인 스 턴 스 가 두 개 있 죠?
그럼,우리 각자 방문 해서 효과 가 어떤 지 봅 시다.
보이 시 나 요?8082 포트,from 은 provider-A,8088 포트,from 은 provider-B 입 니 다.
그러면 저희 가 소비자 서버 를 방문 해서 어떤 상황 이 벌 어 질 지 보도 록 하 겠 습 니 다.비행기 직항.
처음에는 from A 였 는데,새로 고침 해 봐,응?from B 가 됐어 요.
이때 두 공급 자가 교체 작업 을 하여 부하 균형 에 이 르 렀 음 을 나타 낸다.
자,자,내 가 그림 을 그 려 줄 게.
모든 마이크로 서 비 스 는 Eureka-Client 입 니 다.우 리 는 모든 app(SpringBootApplication)을 등록 센터 에 서 비 스 를 등록 합 니 다.
가끔 은 특정한 서비스의 업 무량 이 비교적 많 을 때 우 리 는 같은 이름 의 마이크로 서 비 스 를 몇 개 더 등록 하여 그들 로 하여 금 업 무 를 교체 하고 하나의 서비스의 부담 을 줄 일 수 있다.
여기까지 쓰 면 끝 이 야.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.