나는 마이크로 서비스 개발에 익숙하지 않지만 Spring의 문서와 Netflix의 문서를 모두 읽으며 한동안 조사해 왔습니다.
Github에서 사용할 수 있는 간단한 프로젝트를 시작했습니다 . 기본적으로 Eureka 서버 (Archimedes)와 3 개의 Eureka 클라이언트 마이크로 서비스 (공용 API 1 개, 개인용 2 개)입니다. 자세한 설명은 github의 readme를 확인하십시오.
요점은 모든 것이 실행 중일 때 개인 마이크로 서비스 중 하나가 죽으면 Eureka 서버가이를 인식하고 레지스트리에서 제거하기를 원한다는 것입니다.
나는 유래에이 문제를 발견 하고, 솔루션을 사용하여 전달 enableSelfPreservation:false
유레카 서버 설정에서. 잠시 후이 작업을 수행하면 종료 된 서비스가 예상대로 사라집니다.
그러나 다음 메시지를 볼 수 있습니다.
자체 보존 모드가 꺼져있어 네트워크 / 기타 문제 발생시 인스턴스 만료를 보호하지 못할 수 있습니다.
1. 자기 보존의 목적은 무엇입니까? 문서의 상태가에 자기 보존과 "클라이언트가 더 이상 존재하지 않는 인스턴스를 얻을 수 있습니다" . 그렇다면 언제 켜고 끄는 것이 좋습니까?
또한 자체 보존이 켜져 있으면 Eureka 서버 콘솔 경고에 미해결 메시지가 표시 될 수 있습니다.
비상 사태! EUREKA는 그렇지 않은 경우 인스턴스가 잘못 청구되었을 수 있습니다. 갱신은 임계 값보다 적으므로 인스턴스는 안전을 위해 만료되지 않습니다.
이제 Spring Eureka Console로 진행합니다.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
임계 값 수의 이상한 동작을 발견했습니다. Eureka 서버 만 시작하면 임계 값이 1입니다.
2. 단일 Eureka 서버가 있고 registerWithEureka: false
다른 서버에 등록하지 못하도록 구성되어 있습니다. 그러면 임계 값 개수에 왜 표시됩니까?
3. 모든 클라이언트에 대해 임계 값 카운트가 +2만큼 증가합니다. 분당 2 개의 갱신 메시지를 보내서 그런 것 같아요, 맞죠?
4. Eureka 서버는 갱신을 보내지 않으므로 마지막 갱신 시간은 항상 임계 값 미만입니다. 이것은 정상입니까?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
서버 cfg :
server:
port: ${PORT:8761}
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enableSelfPreservation: false
# waitTimeInMsWhenSyncEmpty: 0
클라이언트 1 cfg :
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true