Prototypuję zestaw aplikacji Spring Cloud + Netflix OSS i mam problem z Eureka. W naszym setupie mamy serwer konfiguracji Spring Cloud + serwer Eureka, a następnie 2 moduły, które wykorzystują ten składnik serwera do ładowania początkowego i odkrywania usług.Eureka peers niezsynchronizowane
Problem napotkasz jest, że jeśli rozpędzają 2 instancje serwera Eureka i starają się je powiązać (na podstawie Dwa Peer Aware Eureka Serwery w the docs) nie synchronizują się ze sobą. Zobacz poniżej konfigurację i/lub the code on GitHub.
Zasadniczo Peer1 uruchamia się i wygląda dobrze. Peer2 uruchomi się i będzie wyglądać dobrze, a obydwie strony będą się wzajemnie pokazywać w usługach. Jeśli jednak moduł "UserService" obróci się i zarejestruje się z Peer1, Peer2 nigdy go nie zobaczy. Jeśli następnie uruchomimy moduł "Web" wskazujący na Peer2, to nigdy nie rozwiąże to UserService. Zasadniczo działają w izolacji.
Próbowałem kilka kombinacji ustawień serviceUrl
zarówno na serwerze i instancji serwerów Eureka, ale bez skutku. Czy po prostu konfiguruję coś źle?
Peer 1/default config:
server:
port: 8888
eureka:
dashboard:
path: /dashboard
instance:
hostname: peer1
leaseRenewalIntervalInSeconds: 3
client:
serviceUrl:
defaultZone: ${eureka.server.serviceUrl:http://localhost:${server.port}/eureka/}
server:
serviceUrl:
defaultZone: http://localhost:${server.port}/eureka/
peer2: http://peer2/eureka/
waitTimeInMsWhenSyncEmpty: 0
spring:
application:
name: demo-config-service
profiles:
active: native
# required for Spring Cloud Bus
rabbitmq:
host: ${DOCKER_IP:192.168.59.103}
port: 5672
username: guest
password: guest
virtualHost:/
cloud:
config:
server:
prefix: /configs
native:
searchLocations: /Users/dave/workspace/oss/distributed-spring/modules/config-server/src/main/resources/testConfigs
# git :
# uri: https://github.com/joshlong/microservices-lab-configuration
Peer 2 config:
server:
port: 8889
eureka:
dashboard:
path: /dashboard
instance:
hostname: peer2
leaseRenewalIntervalInSeconds: 3
client:
serviceUrl:
defaultZone: ${eureka.server.serviceUrl:http://localhost:${server.port}/eureka/}
server:
serviceUrl:
defaultZone: http://localhost:8888/eureka/
peer1: http://peer1/eureka/
waitTimeInMsWhenSyncEmpty: 0
spring:
application:
name: demo-config-service
profiles:
active: native
# required for Spring Cloud Bus
rabbitmq:
host: ${DOCKER_IP:192.168.59.103}
port: 5672
username: guest
password: guest
virtualHost:/
cloud:
config:
server:
prefix: /configs
native:
searchLocations: /Users/dave/workspace/oss/distributed-spring/modules/config-server/src/main/resources/testConfigs
# git :
# uri: https://github.com/joshlong/microservices-lab-configuration
Awesome! Spróbuję tego za kilka. Zdaję sobie sprawę, gdzie popełniłem błąd: myślałem, że nazywanie usług eureka peer1/2 pozwoli im sprawdzać się nawzajem za pośrednictwem rejestru. Ale w tym miejscu przydatne są długowieczne (elastyczne adresy IP w moim przypadku). –
Mam pytanie na ten temat. W przypadku konfiguracji usługi użytkownika, czy konfigurujesz konfigurację eureka na wartość defaultZone: http: // peer1: 8888/eureka /, http: // peer2: 8888/eureka/w celu uzyskania przełączenia awaryjnego w przypadku niepowodzenia peer 1? – EvilJinious1
Tak Larry, to jest idea –