在上一篇中咱们介绍了微服务相关的内容。微服务的本质就是让服务与服务之间进行互相调用。那么在调用以前须要有一个前提。就是不一样的服务与服务之间怎么知道彼此的存在的呢?由于服务都是独立部署的,根本没有任何关联。若是都不知道要调用的服务地址,那还怎么进行互相调用呢?为了解决这样的问题,因而SrpingCloud提供了注册中心的组件。咱们在开发项目时,都向注册中心注册,在进行服务调用时,注册中心返回要调用服务的地址,这样就解决了上述问题了。java
在SrpingCloud中Eureka是注册中心的组件,经过Eureka咱们能够很方便的搭建一个注册中心。在SrpingCloud中Eureka组件分为服务端和客户端。若是有Dubbo项目开发经验的人能够理解为Eureka中的服务端,就至关于zokeerper服务,也就是记录服务地址的。而Eureka中的客户端,便是咱们Dubbo项目中真真正正的服务。下面咱们来详细介绍一下,怎么搭建一个Eureka服务端。git
搭建一个Eureka服务端很是的简单,和建立一个SpringBoot的项目差很少,不一样之处,就是添加依赖不同。下面咱们来详细介绍一下。github
下面我启动直接启动项目看一下运行结果。启动日志:web
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.8.jar:1.9.8] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_191] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_191] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191] 2019-03-09 18:20:09.617 INFO 1752 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-03-09 18:20:09.618 INFO 1752 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8080
咱们发现和SpringBoot启动有一些不一样,咱们什么都没有改,也就是都是用默认的配置,启动的时候,竟然抛出异常了。而在SpringBoot的项目中是能够正常启动的。虽然项目抛出了异常,但项目已经启动成功了,由于日志已经正确的输出了项目的端口了。下面咱们直接访问这个端口,看看会返回什么信息。访问地址:spring
http://127.0.0.1:8080
看上面的返回结果咱们应该很熟悉,这是由于咱们没有写Controller致使的,在SpringBoot的文章中咱们介绍过,这里就不详细介绍了。但这显然是不对的,由于刚刚咱们介绍过SpringCloud中是使用Eureka来提供注册中心服务的,而且Eureka有客户端和服务端之分,因此咱们只在项目添加了Eureka的依赖仍是不够的,咱们还要在项目的代码中添加注解,来标识当前的Eureka服务是客户端服务仍是服务端服务。这也就是本篇介绍的第一个注解。也就是@EnableEurekaServer注解。咱们只要将该注解添加到SpringCloud项目中的启动类中便可。具体代码以下:tomcat
package com.jilinwula.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class JilinwulaSpringcloudEurekaServerApplication { public static void main(String[] args) { SpringApplication.run(JilinwulaSpringcloudEurekaServerApplication.class, args); } }
而后咱们继续启动项目。在访问地址:http://127.0.0.1:8080看一下项目返回的结果。项目启动日志以下:架构
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) ~[eureka-client-1.9.8.jar:1.9.8] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.8.jar:1.9.8] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_191] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_191] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191] 2019-03-09 18:42:29.427 INFO 1837 --- [ Thread-19] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false 2019-03-09 18:42:29.428 INFO 1837 --- [ Thread-19] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context 2019-03-09 18:42:29.461 INFO 1837 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-03-09 18:42:29.461 INFO 1837 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8080
看上述日志,项目启动时仍是会抛出异常,咱们先不用考虑,在后续的内容中咱们在解释为何启动时会抛出异常。仍是和第一次启动同样,虽然启动抛出异常了,但项目仍是启动成功了。下面咱们继续访问如下地址,看一下访问结果。app
http://127.0.0.1:8080
返回结果:spring-boot
咱们看这回返回的不是默认的错误页面了,而是返回了一个管理界面。这个管理界面就是SpringCloud中Eureka组建为咱们提供的注册中心的管理界面,经过这个界面,咱们能够很是方便的,来管理哪些服务注册成功、哪些注册失败以及服务其它状态等。看上图中的界面显示,如今没有任何一个服务注册成功。下面咱们看一下刚刚项目启动时,抛出的异常。若是咱们如今观察项目的启动日志,咱们会发现,日志是每隔一段时间,就会抛出和启动时同样的异常。这是为何呢?这是由于Eureka服务端和客户端是经过心跳方式检测的服务状态。刚刚咱们经过@EnableEurekaServer注解启动了Eureka的服务端。实际上@EnableEurekaServer注解在底层实现时,除了标识项目为Eureka的服务端外,还会默认标识项目为Eureka的客户端。也就是经过@EnableEurekaServer注解标识的项目,默认便是Eureka的客户端仍是Eureka的服务端。因此上述报错的缘由就是Eureka的客户端与找到Eureka的服务端才抛出的异常。那怎么解决呢?既然咱们知道了异常的根本缘由,那咱们解决就比较简单了,咱们只要在项目中正确的配置Eureka的服务端的地址就能够解决上述的问题。具体配置以下。咱们知道在建立SpringClourd项目默认会为咱们建立application.properties文件,咱们首先将该文件修改成yml文件(缘由在以前的文章中已经介绍过了)。具体配置以下。application.yml配置:微服务
eureka: client: service-url: defaultZone: http://127.0.0.1:8080/eureka/
配置完上述参数后,咱们从新启动项目,而后在观察一下日志,看看是否是还会抛出异常?(第一次启动项目时,还会是抛出异常的,由于咱们的Eureka服务端尚未启动成功呢,因此仍是会抛出异常的,咱们只要看心跳以后,会不会抛出异常便可。)下面为启动后的日志:
2019-03-09 21:00:27.909 INFO 1930 --- [ Thread-21] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false 2019-03-09 21:00:27.909 INFO 1930 --- [ Thread-21] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context 2019-03-09 21:00:27.949 INFO 1930 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-03-09 21:00:27.949 INFO 1930 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8080 2019-03-09 21:00:27.952 INFO 1930 --- [ main] inwulaSpringcloudEurekaServerApplication : Started JilinwulaSpringcloudEurekaServerApplication in 4.318 seconds (JVM running for 4.816) 2019-03-09 21:00:28.288 INFO 1930 --- [(1)-192.168.0.3] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2019-03-09 21:00:28.288 INFO 1930 --- [(1)-192.168.0.3] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2019-03-09 21:00:28.295 INFO 1930 --- [(1)-192.168.0.3] o.s.web.servlet.DispatcherServlet : Completed initialization in 6 ms2019-03-09 21:00:57.662 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Disable delta property : false 2019-03-09 21:00:57.662 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null 2019-03-09 21:00:57.662 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false 2019-03-09 21:00:57.662 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Application is null : false 2019-03-09 21:00:57.662 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true 2019-03-09 21:00:57.662 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Application version is -1: true 2019-03-09 21:00:57.662 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server 2019-03-09 21:00:57.745 WARN 1930 --- [nio-8080-exec-1] c.n.e.registry.AbstractInstanceRegistry : DS: Registry: lease doesn't exist, registering resource: UNKNOWN - 192.168.0.3 2019-03-09 21:00:57.745 WARN 1930 --- [nio-8080-exec-1] c.n.eureka.resources.InstanceResource : Not Found (Renew): UNKNOWN - 192.168.0.3 2019-03-09 21:00:57.763 INFO 1930 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_UNKNOWN/192.168.0.3 - Re-registering apps/UNKNOWN 2019-03-09 21:00:57.763 INFO 1930 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_UNKNOWN/192.168.0.3: registering service... 2019-03-09 21:00:57.770 INFO 1930 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : The response status is 200 2019-03-09 21:00:57.807 INFO 1930 --- [nio-8080-exec-3] c.n.e.registry.AbstractInstanceRegistry : Registered instance UNKNOWN/192.168.0.3 with status UP (replication=false) 2019-03-09 21:00:57.809 INFO 1930 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_UNKNOWN/192.168.0.3 - registration status: 204 2019-03-09 21:00:58.329 INFO 1930 --- [nio-8080-exec-4] c.n.e.registry.AbstractInstanceRegistry : Registered instance UNKNOWN/192.168.0.3 with status UP (replication=true)
咱们看项目这时已经不会抛出异常了,而且经过观察发现,每隔一段时间就会有日志输出,这也就是上面介绍的Eureka的服务端和Eureka的客户端的心跳机制。下面咱们继续访问http://127.0.0.1:8080地址来看看此时的注册中心和刚刚相比,是否有不同的地方。
咱们看这时的注册中心已经检测到了有服务注册了,只不过这个服务就是Eureka的服务端本身,而且名字为UNKNOWN。若是有强迫者的人若是看到UNKNOWN那必定会感受不舒服,不了解了Eureka组件的还觉得注册中心出错了呢。下面咱们修改一下项目参数,将UNKNOWN改为咱们指定的名字。具体配置以下:
eureka: client: service-url: defaultZone: http://127.0.0.1:8080/eureka/ spring: application: name: jilinwula-springcloud-eureka-server
咱们在看一下注册中的的变化,看看仍是不是已经成功的将UNKNOWN修改成咱们指定的项目名字了。
咱们看注册中心已经成功的显示咱们配置文件中的项目名字了。在实际的开发中,咱们基本不会让注册中心显示Eureka的服务端本身的服务,这样可能会致使和Eureka的客户端相混淆。因此一般的作法是让注册中心将Eureka的服务端屏蔽掉,说是屏蔽其实是让Eureka的服务端不向注册中心注册。具体配置以下:
eureka: client: service-url: defaultZone: http://127.0.0.1:8080/eureka/ register-with-eureka: false spring: application: name: jilinwula-springcloud-eureka-server
咱们在观察一下注册中心看看仍是否能够检测到Eureka服务端本身。
咱们发现这时注册中心已经检测到不任何服务了。下面咱们将Eureka服务端的端口设置为默认的端口8761,由于8080端口可能会被占用。具体配置以下:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/ register-with-eureka: false spring: application: name: jilinwula-springcloud-eureka-server server: port: 8761
这时咱们Eureka服务端的基本配置就介绍完了,下面咱们介绍一下Eureka组件的客户端。下面咱们仍是向Eureka服务端同样从建立项目开始。具体步骤以下:
备注:为了保证Eureka服务端和客户端能够注册成功,咱们要特别注意保证两个项目中SpringBoot及其SpringCloud的版本一致。因为剩下的步骤和Eureka服务端同样,咱们就不作过多的介绍了。下面咱们仍是和Eureka服务端同样,配置注册中心的服务地址。具体配置以下:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/ spring: application: name: jilinwula-springcloud-eureka-client server: port: 8081
若是只修改上面的配置,注册中心是不会检测到Eureka客户端的,由于咱们尚未在该项目的启动类上添加Eureka客户端的注解。具体配置以下:
package com.jilinwula.jilinwulaspringcloudeurekaclient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class JilinwulaSpringcloudEurekaClientApplication { public static void main(String[] args) { SpringApplication.run(JilinwulaSpringcloudEurekaClientApplication.class, args); } }
也就是添加@EnableEurekaClient注解。实际上除了该注解外,咱们还能够用@EnableDiscoveryClient注解来达到一样的做用。它们两个注解的区别是注册中心的实现方式有不少种,若是是采用的是Eureka服务的话,那客户端直接使用@EnableEurekaClient注解和@EnableDiscoveryClient注解均可以。若是注册中心采用的是zookeeper或者其它服务时,那咱们注册中心客户端就不能采用@EnableEurekaClient注解了,而是要使用@EnableDiscoveryClient注解。因此在实际的开发中咱们推荐使用@EnableDiscoveryClient注解,这样当咱们更换注册中心实现时,就不用修改代码了。上述代码中咱们为了和Eureka服务端一致,因此咱们采用@EnableDiscoveryClient注解。下面咱们启动一下项目看看注册中心是否能够成功的检测Eureka客户端的存在。当咱们按照上面的配置启动Eureka客户端时,咱们发现日志竟然报错了,而且项目自动中止运行了。具体日志以下:
2019-03-09 23:00:55.844 INFO 2082 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_JILINWULA-SPRINGCLOUD-EUREKA-CLIENT/192.168.0.3:jilinwula-springcloud-eureka-client:8081: registering service... 2019-03-09 23:00:55.852 INFO 2082 --- [ main] inwulaSpringcloudEurekaClientApplication : Started JilinwulaSpringcloudEurekaClientApplication in 2.115 seconds (JVM running for 2.567) 2019-03-09 23:00:55.866 INFO 2082 --- [ Thread-8] o.s.c.n.e.s.EurekaServiceRegistry : Unregistering application JILINWULA-SPRINGCLOUD-EUREKA-CLIENT with eureka with status DOWN 2019-03-09 23:00:55.866 WARN 2082 --- [ Thread-8] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1552143655866, current=DOWN, previous=UP] 2019-03-09 23:00:55.869 INFO 2082 --- [ Thread-8] com.netflix.discovery.DiscoveryClient : Shutting down DiscoveryClient ... 2019-03-09 23:00:55.883 INFO 2082 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_JILINWULA-SPRINGCLOUD-EUREKA-CLIENT/192.168.0.3:jilinwula-springcloud-eureka-client:8081 - registration status: 204 2019-03-09 23:00:55.883 INFO 2082 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_JILINWULA-SPRINGCLOUD-EUREKA-CLIENT/192.168.0.3:jilinwula-springcloud-eureka-client:8081: registering service... 2019-03-09 23:00:55.888 INFO 2082 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_JILINWULA-SPRINGCLOUD-EUREKA-CLIENT/192.168.0.3:jilinwula-springcloud-eureka-client:8081 - registration status: 204 2019-03-09 23:00:55.889 INFO 2082 --- [ Thread-8] com.netflix.discovery.DiscoveryClient : Unregistering ... 2019-03-09 23:00:55.893 INFO 2082 --- [ Thread-8] com.netflix.discovery.DiscoveryClient : DiscoveryClient_JILINWULA-SPRINGCLOUD-EUREKA-CLIENT/192.168.0.3:jilinwula-springcloud-eureka-client:8081 - deregister status: 200 2019-03-09 23:00:55.902 INFO 2082 --- [ Thread-8] com.netflix.discovery.DiscoveryClient : Completed shut down of DiscoveryClient
这是为何呢?这个问题的缘由是由于版本不一样致使的,也就是有的Eureka版本有BUG致使的,少了一个依赖咱们只要把缺乏的依赖添加上便可。缺乏的依赖以下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
下面咱们继续启动Eureka客户端,而后看看注册中心是否能够检测到Eureka客户端。
这时咱们发现注册中心已经成功的检测到了Eureka客户端的服务了。除此以外,咱们发现此时的注册中心和以往相比有了其它的不一样,咱们发现注册中心显示警告信息了。这是为何呢?这是由于注册中心有预警机制,由于我为了掩饰项目,会频繁的启动重启项目,这样注册中心的心跳就会时常检测不到Eureka客户端的心跳,因此就会认为该服务已下线。因此Eureka注册中心当服务下线少于必定比率时,就会显示警告信息,以此来表示有的服务运行不稳定。固然咱们仍是能够经过配置参数来消除上面的警告。具体参数以下:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/ register-with-eureka: false server: enable-self-preservation: false spring: application: name: jilinwula-springcloud-eureka-server server: port: 8761
该参数的是意思是默认认为服务均在线,而且还有一点要注意,该参数是在Eureka服务端配置的。咱们从新启动完Eureka服务端后,在看一下注册中心中的变化。
这时咱们发现警告信息又变了,这说明咱们的配置参数启做用了。那为何还会提示警告呢?这是由于咱们配置了改参数,因此注册中心就不会准确的检查服务上下线状态了。因此提示了另外一个警告。下面咱们将Eureka服务端配置成多节点,在实际的项目开发中,咱们知道一个节点可能会出现问题,若是Eureka服务端出现了问题,那么就至关于整个服务都不能调用了,因此为了保证高可用,一般会将Eureka服务端配置成多个节点,下面咱们先尝试将Eureka服务端配置成双节点。既然是双节点,那固然是有两个Eureka服务端项目了,因为建立Eureka服务端的步骤,咱们已经很熟悉了,因此咱们只介绍它们配置文件的不一样。首先咱们先看一下第一个Eureka服务端注册中心配置:
eureka: client: service-url: defaultZone: http://127.0.0.1:8762/eureka/ register-with-eureka: false server: enable-self-preservation: false spring: application: name: jilinwula-springcloud-eureka-server server: port: 8761
第二个Eureka服务端注册中心配置:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/ register-with-eureka: false server: enable-self-preservation: false spring: application: name: jilinwula-springcloud-eureka-server server: port: 8762
咱们发现这两个配置基本相同,惟一的不一样就是配置注册中地方,它们彼此配置的是对方的服务地址。也就是让两个Eureka服务端彼此注册,这样就只要咱们Eureka客户端注册任意一个注册中心,这两个注册中心均可以检测到Eureka客户端的存在,由于底层它们会进行数据同步。下面咱们看一下如今的注册中心的变化。
8761注册中心:
8762注册中心:
咱们看咱们的Eureka客户端只配置了一个注册中心,但两个注册中心都检测到了Eureka客户端的存在。这就是刚刚提到过的当两个注册中心彼此注册时,就会进行数据通讯,因此8762注册中心也检测到了该Eureka客户端的存在。下面咱们将8761注册中心中止服务,而后在观察一下8762的注册中心,看看是否有何变化。
8762注册中心:
咱们发现虽然咱们将8761注册中心中止了服务,但8762注册中心依然检测到了Eureka客户端的存在。下面咱们从新启动一下Eureka客户端而后在看一下8762注册中心仍是否能够检测到Eureka客户端的存在。
这时咱们发现8762注册中心已经检测不到Eureka客户端的服务了。那应该怎么办呢?解决的办法很简单,那就是让咱们的Eureka客户端注册两个注册中心。具体配置以下:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/,http://127.0.0.1:8762/eureka/ spring: application: name: jilinwula-springcloud-eureka-client server: port: 8081
这时咱们在访问一下注册中心,看一下服务是否能够检测到。
这时咱们的注册中心已经成功的检测到了Eureka客户端了。下面咱们介绍一下怎么部署Eureka服务端3节点。既然2节点咱们已经知道了要彼此注册,那么3节点,咱们应该已经猜到了,那就是让每个节点都注册另外两个节点的服务。具体配置以下:
8761注册中心:
eureka: client: service-url: defaultZone: http://127.0.0.1:8762/eureka/,http://127.0.0.1:8763/eureka/ register-with-eureka: false server: enable-self-preservation: false spring: application: name: jilinwula-springcloud-eureka-server server: port: 8761
8762注册中心:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/,http://127.0.0.1:8763/eureka/ register-with-eureka: false server: enable-self-preservation: false spring: application: name: jilinwula-springcloud-eureka-server server: port: 8762
8763注册中心:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/,http://127.0.0.1:8762/eureka/ register-with-eureka: false server: enable-self-preservation: false spring: application: name: jilinwula-springcloud-eureka-server server: port: 8763
Eureka客户端:
eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka/,http://127.0.0.1:8762/eureka/,http://127.0.0.1:8763/eureka/ spring: application: name: jilinwula-springcloud-eureka-client server: port: 8081
下面咱们看一下访问任何一个注册中心,来看一下注册中心是否能够检测到Eureka客户端的服务,及其它注册中心的存在。
咱们看注册中心已经成功的检测到了Eureka客户端的服务了,而且红色标识的地方已经检测到了其它两个注册中心的地址了,因此咱们在访问注册中心时,就能够经过下面红色标识的地方,来了解项目中的Eureka服务端有几个注册中心。
上述内容就是SpringClould中Eureka组件的详细介绍,若有不正确或者须要交流的欢迎留言,下一篇咱们将介绍怎么在SpringClould中进行不一样的服务与服务之间的调用。谢谢。
https://github.com/jilinwula/jilinwula-springcloud-eureka.git