Mikro hizmetler geliştirme konusunda yeniyim, ancak bir süredir bu konuda araştırma yapmama rağmen hem Spring'in belgelerini hem de Netflix'in belgelerini okuyorum.
Github'da mevcut olan basit bir projeye başladım . Temelde bir Eureka sunucusu (Archimedes) ve üç Eureka istemci mikro hizmeti (bir genel API ve iki özel). Ayrıntılı bir açıklama için github'ın benioku dosyasına bakın.
Mesele şu ki, her şey çalışırken, özel mikro hizmetlerden biri öldürülürse, Eureka sunucusu bunu fark eder ve kayıt defterinden kaldırır.
Ben Stackoverflow üzerinde bu soruyu buldum ve çözüm kullanarak geçer enableSelfPreservation:false
Eureka Sunucu yapılandırmasında. Bunu bir süre sonra yapmak, öldürülen servis beklendiği gibi kaybolur.
Ancak şu mesajı görebiliyorum:
KENDİ KENDİNİ KORUMA MODU KAPATILMIŞTIR. BU ŞEBEKE / DİĞER SORUNLAR DURUMUNDA KURULUMUN SONA ERMESİNİ KORUMAYABİLİR.
1. Kendini korumanın amacı nedir? Doc devletler bu konuda kendini koruma ile "müşteriler artık yok örneklerini alabilirsiniz" . Öyleyse ne zaman açıp kapatmanız önerilir?
Ayrıca, kendini koruma açıkken, Eureka Sunucu konsolunda olağanüstü bir mesaj alabilirsiniz uyarısı:
ACİL DURUM! EUREKA OLMADIĞINDA YANLIŞ BİR ŞEKİLDE İDDİA EDEN ANLAŞMALARI UZAYABİLİR. YENİLEMELER EŞİKTEN DAHA DAHA AZ OLDUĞUNDAN DOLAYI GÜVENLİ OLMAK İÇİN ÖRNEKLERİN SÜRESİ SONA ERMEMEKTEDİR.
Şimdi, Spring Eureka Konsolu ile devam ediyoruz.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
Eşik sayısının garip bir davranışıyla karşılaştım: Eureka Sunucusunu tek başına başlattığımda eşik 1'dir.
2. Tek bir Eureka sunucum var ve registerWithEureka: false
başka bir sunucuya kaydolmasını önlemek için yapılandırıldım . O zaman neden eşik sayısında görünüyor?
3. Başladığım her müşteri için eşik sayısı +2 artar. Sanırım dakika başına 2 yenileme mesajı gönderdikleri için değil mi?
4. Eureka sunucusu asla bir yenileme göndermez, bu nedenle son dakika yenilenmeleri her zaman eşiğin altındadır. Bu normal mi?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
Sunucu 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
İstemci 1 cfg:
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true