Spring Eureka 설정

Eureka 서버 설정

//build.gradle

//스프링클라우드에 대한 버전 지정
ext{
	set('springCloudVersion', '2021.0.8')
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	⭐implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}
//application.yml

spring:
  application:
    name: eureka-server

server:
  port: 8761

eureka:
  client:
#    eureka서버가 자기 자신을 eureka에 등록하지 않는 설정
    register-with-eureka: false
    fetch-registry: false
//EurekaApplication.java

@SpringBootApplication
⭐@EnableEurekaServer
public class EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaApplication.class, args);
	}

}

 

Eureka 서버 정상동작 확인

- localhost:8761접속

 

Item1 Service 설정

//yml 파일

#    유레카 서버에 아래 application.name으로 서비스명을 등록
  application:
    name: item-service
⭐eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
//build.gradle

//스프링클라우드에 대한 버전 지정
⭐ext{
	set('springCloudVersion', '2021.0.8')
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	⭐implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}

⭐dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}
//ItemApplication.java

@SpringBootApplication
⭐@EnableEurekaClient
public class OrderingApplication {

	public static void main(String[] args) {
		SpringApplication.run(OrderingApplication.class, args);
	}

}

 

Item1 Service 설정 및 서버 실행 후

localhost:8761접속확인 시 서버 UP 확인

 

Item2 Service 설정

Item1과 같이 설정 후 Port8082설정

//application.yml

spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3306/spring_order
    username: root
    password: 1234

  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MariaDBDialect
    generate-ddl: true
    hibernate:
      ddl-auto: update
    show-sql: true

#    유레카 서버에 아래 application.name으로 서비스명을 등록
  application:
    name: item-service
⭐eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    preferIpAddress: true
    hostname: localhost

server:
  ⭐port: 8082

 

Item2 Service 설정 및 서버 실행 후

localhost:8761접속확인 시 서버 UP 확인

 

API-Gateway 설정

//GatewayApplication.java

@SpringBootApplication
⭐@EnableEurekaClient
public class GatewayApplication {

	public static void main(String[] args) {
		SpringApplication.run(GatewayApplication.class, args);
	}
}
//build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.12'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.encore'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '11'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

//스프링클라우드에 대한 버전 지정
⭐ext{
	set('springCloudVersion', '2021.0.8')
}

repositories {
	mavenCentral()
}

dependencies {
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	⭐implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
	⭐implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
}

⭐dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

tasks.named('test') {
	useJUnitPlatform()
}
//application.yml

server:
  port: 8080

⭐spring:
  #    유레카 서버에 아래 application.name으로 서비스명을 등록
  application:
    name: api-gateway
  cloud:
    gateway:
      routes: 
        - id: item-service #item-service에 대한 정의를 하겠다.
#          lb://eureka에 등록된 서비스 명
          uri: lb://item-service
#          /item-service로 시작하는 url요청이 들어올 경우
          predicates:
            - Path=/item-service/**
#          filters에 StripPrefix=1은 첫번째 접두어 제거
          filters:
            - StripPrefix=1

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    preferIpAddress: true
    hostname: localhost

 

API-Gateway설정 및 서버 실행 후

localhost:8761접속확인 시 서버 UP 확인

 

Eureka Item1, Item2 접속테스트

API-GATEWAY(port:8080)로 접속 후 Item1(port:8081) , Item2(port:8082) 접속 로그 확인