天天看点

springcloud之Eureka基础

Eureka简介

1、Eureka原理

springcloud之Eureka基础
Application server:相当于项目中的服务提供者;
Application Client:相当于本书的服务消费者;
Make Remote Call:可以理解成调用RESTful API的行为;
us-east-lc、us-east-ld等都是zone,它们都属于us-east-l这个region;
           

2、Eureka的两个组件 Eureka server 和 Eureka Client

Eureka server:提供服务发现的能力,各个微服务启动时,会向Eureka server注册自己的信息(例如:IP、端口、微服务名称等),Eureka server会存储这些信息;
Eureka Client:是一个Java客户端,用于简化与Eureka server的交互;
微服务启动后,会周期性(默认30s)地向Eureka server发送心跳以续约自己的“租期”;
如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销该实例(默认90 s);
默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例互相直接通过复制的方式来实现服务注册列表中数据的同步;
Eureka Client会缓存服务注册表中的信息,这种方式有一定的优势——首先,微服务无需每次请求都查询Eureka Server,从而降低了Eureka Server的压力;其次,即使Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。
           

注释:Eureka通过心跳检查、客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性;

3、创建Eureka Server

(1)依赖的jar包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
           

(2)启动类的编写

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}
           

注解:

@EnableEurekaServer表示声明一个Eureka Service
           

(3)application.xml文件的配置

server:
  port: 6868
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:${server.port}/eureka/
           

注解

server.port:表示当前服务的端口号
eureka.client.registerWithEureka:表示是否将自己注册到Eureka Server,默认为true。由于当前应用就是Eureka Server,故而设为false;
eureka.client.fetchRegistry:表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false;
eureka.client.serviceUrl.defaultZone:设置与Eureka Server交互的地址,查询服务和注册服务需要依赖这个地址。默认是http://127.0.0.1:${server.port}/eureka/  多个地址之间可以使用,分隔。
           

(4)测试

启动Eureka Server 访问http://127.0.0.1:6868/
           

3、将微服务注册到Eureka Server上

(1)依赖jar包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
           

(2)application.yml配置文件

pring: 
  application:  
    name:  yczj-manager
eureka:
  client:
     serviceUrl:
        defaultZone: http://127.0.0.1:6868/eureka/
  instance:
    prefer-ip-address: true
           

注释:

pring.application.name:用于指定注册到Eureka Server上的应用名称;
eureka.instance.prefer-ip-address:表示将自己的IP注册到Eureka Server。如不配置该属性获将其设置为false,则表示注册微服务所在操作系统的hostname到Eureka Server;
           

(3)启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProvideUserApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProvideUserApplication.class, args);
    }
}
           

注释:

这样既可将用户微服务注册到Eureka Server上。同理,将其他微服务也注册到Erueka Server上,配置以上信息
           

注意事项:

1、在Spring Cloud Edgware之前,要想将微服务注册到Eureka Server或其他服务发现组件上,必须在启动类上添加@EnableDiscoveryClient或者@EnableEurekaClient
2、在Spring CloudEdgware以及更高版本中,只需要添加相关依赖,即可自动注册。这是由于在实际项目中,我们可能希望实现“不同环境不同配置”的效果,例如:在开发环境中,不注册到Eureka Server上,而是服务提供者、服务消费者直连,便于调测;在生产环境中,我们有希望能够享受服务发现的优势---服务消费者无须知道服务提供者的绝对地址。
3、如不想将服务注册到Eureka Server,只需设置
spring.cloud.service-reg-istry.auto-registration.enabled=false
或者@EnableDiscoveryClient(auto-Register=false)即可
           

继续阅读