異常描述:
配置 eureka 高可用,啓動拋:
2019-09-04 15:43:45.224 [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-10002"]
2019-09-04 15:43:45.233 [main] INFO o.a.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read
2019-09-04 15:43:45.248 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 10002 (http) with context path ''
2019-09-04 15:43:45.248 [main] INFO o.s.c.n.e.s.EurekaAutoServiceRegistration - Updating port to 10002
2019-09-04 15:43:45.250 [main] INFO com.tc.town.eureka.EurekaApplication - Started EurekaApplication in 8.454 seconds (JVM running for 9.306)
2019-09-04 15:43:45.710 [RMI TCP Connection(4)-127.0.0.1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring FrameworkServlet 'dispatcherServlet'
2019-09-04 15:43:45.711 [RMI TCP Connection(4)-127.0.0.1] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization started
2019-09-04 15:43:45.728 [RMI TCP Connection(4)-127.0.0.1] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 17 ms
2019-09-04 15:43:56.841 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.netflix.discovery.DiscoveryClient - Disable delta property : false
2019-09-04 15:43:56.841 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.netflix.discovery.DiscoveryClient - Single vip registry refresh property : null
2019-09-04 15:43:56.842 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.netflix.discovery.DiscoveryClient - Force full registry fetch : false
2019-09-04 15:43:56.842 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.netflix.discovery.DiscoveryClient - Application is null : false
2019-09-04 15:43:56.842 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.netflix.discovery.DiscoveryClient - Registered Applications size is zero : true
2019-09-04 15:43:56.842 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.netflix.discovery.DiscoveryClient - Application version is -1: true
2019-09-04 15:43:56.842 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.netflix.discovery.DiscoveryClient - Getting all instance registry info from the eureka server
2019-09-04 15:43:57.229 [DiscoveryClient-InstanceInfoReplicator-0] INFO c.netflix.discovery.DiscoveryClient - DiscoveryClient_TC-TOWN-EUREKA/LCR-PC:tc-town-eureka:10001: registering service...
2019-09-04 15:43:59.399 [DiscoveryClient-InstanceInfoReplicator-0] ERROR c.n.d.s.t.d.RedirectingEurekaHttpClient - Request execution error
com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: eureka02
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.register(AbstractJerseyEurekaHttpClient.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:120)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829)
at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
at java.util.concurrent.FutureTask.run(FutureTask.java)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.UnknownHostException: eureka02
at java.net.InetAddress.getAllByName0(InetAddress.java:1280)
at java.net.InetAddress.getAllByName(InetAddress.java:1192)
at java.net.InetAddress.getAllByName(InetAddress.java:1126)
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:162)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173)
... 30 common frames omitted
看錯誤信息 ,很明顯提示你了,說未定義 eureka02 的 host:
Caused by: java.net.UnknownHostException: eureka02
解決方案,在本機定義下 host 即可(host位置:C:\Windows\System32\drivers\etc\hosts):
127.0.0.1 eureka01
127.0.0.1 eureka02
附:項目例子
一、eureka yml 配置:
server:
port: ${PORT:10001} #服務端口
spring:
application:
name: tc-town-eureka #指定服務名
eureka:
client:
registerWithEureka: true #服務註冊,是否將自己註冊到Eureka服務中
fetchRegistry: true #服務發現,是否從Eureka中獲取註冊信息
serviceUrl: #Eureka客戶端與Eureka服務端的交互地址,高可用狀態配置對方的地址,單機狀態配置自己(如果不配置則默認本機8761端口)
defaultZone: ${EUREKA_SERVER:http://eureka02:10002/eureka/}
server:
enable-self-preservation: false #是否開啓自我保護模式
eviction-interval-timer-in-ms: 60000 #服務註冊表清理間隔(單位毫秒,默認是60*1000)
instance:
hostname: ${EUREKA_DOMAIN:eureka01}
二、idea 配置高可用啓動:
配置 eureka01 vm啓動參數,把 eureka01 註冊到 eureka02 中
配置 eureka02 vm啓動參數,把 eureka02 註冊到 eureka01 中