Spring Cloud的注册中心Eureka

大家如果觉得我写的好,可以关注这个项目,之后我的学习过程中都会把学习笔记放入这个项目中。
https://github.com/IndustriousSnail/learning-notes

Spring Cloud的注册中心Eureka

目录

一、Eureka基本概念

Eureka是用于服务注册与发现的。

1. 服务:一个项目会包含很多服务。比如,订单服务,商品服务,用户服务。 而这些服务是相互独立,但是又相互依赖,不同的服务之间需要相互调用。 由于各个服务之间是部署在不同的集群上,IP地址动态变化, 服务之间为了知道各个服务都是分布在哪些机器上的,所以需要将自己的服务注册在Eureka服务器上。 以便于其他服务的调用。 2. 服务注册:将服务注册在Eureka服务器上。Eureka服务器也可以建立集群,只需要两两注册即可。 服务发现 3. 服务发现:到Eureka服务器上寻找自己所要访问的服务在哪台服务器上。

由两个组件构成:

1. Eureka Server 注册中心

用于服务注册的服务器

  1. Eureka Client 服务注册

    每一个微服务都是一个Client,服务需要将自己注册到Eureka Server上去

二、Eureka Server注册中心

2.1 Erueka Server在Spring Boot中的使用

1.在Application上增添@EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
2.启动项目
启动项目,登录localhost:8080就可以看到Eureka的管理界面了。



界面上的“Instances currently registered with Eureka”就是注册在这个服务器上的服务。 目前没有客户端注册到eureka上来。同时,启动的时候会报错,并且会不停报错。
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
	at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:111) ~[eureka-client-1.7.2.jar:1.7.2]
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.7.2.jar:1.7.2]
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.7.2.jar:1.7.2]
	at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.7.2.jar:1.7.2]
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.7.2.jar:1.7.2]
	at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:807) ~[eureka-client-1.7.2.jar:1.7.2]
	at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:109) ~[eureka-client-1.7.2.jar:1.7.2]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_181]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_181]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_181]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_181]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_181]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_181]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]

这是因为Eureka Server本身也是一个Client,它需要注册到另一个服务器上,但是因为找不到注册的服务器,所以会不停报错。

为了解决报错问题,我们需要进行配置,将自己注册到自己上。
需要在application.yml上进行如下配置

eureka:
  client:
    service-url:
      # client将服务注册在该地址上
      defaultZone: http://localhost:8761/eureka/
    # 增加该配置,则不会将eureka注册在自己的机器上
    register-with-eureka: false
spring:
  application:
    # 为应用程序命名,该名字会反应在eureka平台上
    name: eureka_server

增添如下配置,虽然启动时还会报错,但是可以忽略启动时的报错。但是之后的心跳不会出现报错现象。
如果将register-with-eureka配置置为true,则平台上会看到自己,如果为false则不会。

三、Spring Boot中使用Eureka Client

1.构建SpringBoot项目,并且选中“Cloud Discovery->Eureka Discovery” 或者在原来的项目中增加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

2.在application.yml中增加配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

3.在Application启动类上增添注解@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient   //有些版本不加这个注解,也是可以注册成功的
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class, args);
    }
}

4.启动后,可以到Eureka服务器页面查看

猜你喜欢

转载自blog.csdn.net/zhaohongfei_358/article/details/83148512