当前位置:   article > 正文

SpringCloud微服务组件——Eureka快速入门

eureka快速入门

Eureka

Eureka的作用

Eureka就是帮助我们维护所有服务的信息,以便服务之间的相互调用
搜索模块将服务注册到Eureka上,客户端模块去Eureka上发现模块

Eureka快速入门
创建EurekaServer

创建一个父工程,并且在父工程中指定SpringCloud的版本,并且将packaing修改为pom

   <dependencyManagement>
       <dependencies>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
              <version>Greenwich.SR6</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
      </dependencies>
  </dependencyManagement>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

创建eureka的server,创建SpringBoot工程,并且导入依赖,在启动类中添加注解,编写yml文件

<dependencies>
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

启动类添加注解

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
   public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

编写yml配置文件

server:
 port: 8761      # 端口号
eureka:
 instance:
   hostname: localhost   # localhost
 client:
   # 当前的eureka服务是单机版的
   registerWithEureka: false
   fetchRegistry: false
   serviceUrl:
     defaultZone: >http://${eureka.instance.hostname}:${server.port}/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
创建EurekaClient

创建Maven工程,修改为SpringBoot
导入依赖

<dependency>    
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

在启动类上添加注解

@SpringBootApplication
@EnableEurekaClient
public class CustomerApplication {
   public static void main(String[] args) {
      SpringApplication.run(CustomerApplication.class,args);
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

编写配置文件

# 指定Eureka服务地址
eureka:
 client:
   service-url:
     defaultZone: http://localhost:8761/eureka
#指定服务的名称
spring:
 application:
   name: CUSTOMER
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
测试Eureka

创建了一个Search搜索模块,并且注册到Eureka
使用到EurekaClient的对象去获取服务信息

@Autowired
private EurekaClient eurekaClient;
  • 1
  • 2

正常RestTemplate调用即可

@GetMapping("/customer")
public String customer(){
   //1. 通过eurekaClient获取到SEARCH服务的信息
   InstanceInfo info = eurekaClient.getNextServerFromEureka("SEARCH", false);
   //2. 获取到访问的地址
   String url = info.getHomePageUrl();
  System.out.println(url);
   //3. 通过restTemplate访问
   String result = restTemplate.getForObject(url + "/search", String.class);
   //4. 返回
   return result;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
Eureka的安全性

实现Eureka认证
导入依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

编写配置类

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       // 忽略掉/eureka/**
       http.csrf().ignoringAntMatchers("/eureka/**");
       super.configure(http);
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

编写配置文件

# 指定用户名和密码
spring:
 security:
   user:
     name: root
     password: root
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其他服务想注册到Eureka上需要添加用户名和密码

eureka:
 client:
   service-url:
     defaultZone: http://用户名:密码@localhost:8761/eureka
  • 1
  • 2
  • 3
  • 4
Eureka的高可用

如果程序的正在运行,突然Eureka宕机了。

  • 如果调用方访问过一次被调用方了,Eureka的宕机不会影响到功能。
  • 如果调用方没有访问过被调用方,Eureka的宕机就会造成当前功能不可用。

搭建Eureka高可用

eureka:
 client:
   service-url:
     defaultZone: http://root:root@localhost:8761/eureka,http://root:root@localhost:8762/eureka
  • 1
  • 2
  • 3
  • 4

让多台Eureka之间相互通讯

eureka:
 client:
   registerWithEureka: true      # 注册到Eureka上
   fetchRegistry: true           # 从Eureka拉取信息
   serviceUrl:
     defaultZone: http://root:root@localhost:8762/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Eureka的细节

EurekaClient启动是,将自己的信息注册到EurekaServer上,EurekaSever就会存储上EurekaClient的注册信息。

当EurekaClient调用服务时,本地没有注册信息的缓存时,去EurekaServer中去获取注册信息。

EurekaClient会通过心跳的方式去和EurekaServer进行连接。(默认30sEurekaClient会发送一次心跳请求,如果超过了90s还没有发送心跳信息的话,EurekaServer就认为你宕机了,将当前EurekaClient从注册表中移除)

eureka:
 instance:
   lease-renewal-interval-in-seconds: 30      #心跳的间隔
   lease-expiration-duration-in-seconds: 90    # 多久没发送,就认为你宕机了
  • 1
  • 2
  • 3
  • 4

EurekaClient会每隔30s去EurekaServer中去更新本地的注册表

eureka:
 client:
   registry-fetch-interval-seconds: 30 # 每隔多久去更新一下本地的注册表缓存信息
  • 1
  • 2
  • 3

Eureka的自我保护机制,统计15分钟内,如果一个服务的心跳发送比例低于85%,EurekaServer就会开启自我保护机制

  • 不会从EurekaServer中去移除长时间没有收到心跳的服务。
  • EurekaServer还是可以正常提供服务的。
  • 网络比较稳定时,EurekaServer才会开始将自己的信息被其他节点同步过去
eureka:
 server:
   enable-self-preservation: true  # 开启自我保护机制
  • 1
  • 2
  • 3
  • CAP定理,C - 一致性,A-可用性,P-分区容错性,这三个特性在分布式环境下,只能满足2个,而且分区容错性在分布式环境下,是必须要满足的,只能在AC之间进行权衡。

  • 如果选择CP,保证了一致性,可能会造成你系统在一定时间内是不可用的,如果你同步数据的时间比较长,造成的损失大。

  • Eureka就是一个AP的效果,高可用的集群,Eureka集群是无中心,Eureka即便宕机几个也不会影响系统的使用,不需要重新的去推举一个master,也会导致一定时间内数据是不一致。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号