SpringCloud—eureka

114 阅读2分钟

微服务调用关系

提供者与消费者

  • 服务提供者:一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)

  • 服务消费者:一次业务中,调用其他微服务的服务。(调用其他微服务提供的接口)

提供者与消费者角色是相对的

eureka 在微服务中的角色和作用:

SpringCloud 将eureka集成在其子项目 spring-cloud-netflix 中,实现 SpringCloud 的服务发现功能。其实,Eureka 就是一个专门用于服务发现的服务器,一些服务注册到该服务器,而另一 些服务通过该服务器查找其所要调用执行的服务。可以充当服务发现服务器的组件很多,例 如 Zookeeper、Consul 等。

eureka工作原理

1、服务提供者注册服务信息到注册中心,eureka保存这些注册信息。供消费者根据服务名称从eureka拉取提供者信息

2、服务调用者到Eureka注册中心拉取服务信息

3、负载均衡从拉取到的服务列表中选中可用的服务

4、远程调用

服务提供者会每隔30秒向eureka Server发送心跳请求,报告健康状态,eureka会更新记录服务列表信息,心跳不正常的服务会被剔除。

在Eureka架构中的服务端与客户端

1、EurekaServer服务端,注册中心

  • 记录服务信息

  • 心跳监控

2、EurekaClient 客户端

  • Provider: 服务提供者。注册服务信息到EurekaServer,定时发送心跳。

  • consumer:服务消费者。根据服务名称从EurekaServer中拉取服务列表,发起远程调用。

搭建EurekaServer

1、引入依赖

<dependency>

   <groupId>org.springframework.cloud</groupId>

   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

</dependency>

2、添加@EnableEurekaServer注解

@EnableEurekaServer //表示是EureakaServer

@SpringBootApplication

public class EurekaServer01Application {

    public static void main(String[] args) {

        SpringApplication.run(EurekaServer01Application.class, args);

    }

}

3、在application.yml中配置eureka地址

eureka:

  instance:

    #指定Eureka主机 localhost 表示本机

    hostname: localhost

  client:

    #是否注册到Eurka Server中 在这里表示是否需要自己注册自己

    register-with-eureka: true

    service-url:

      #注册中心EurekaSever的地址,如果是集群的话,可以在defaulZone 配置为集群中其他的机器,多个的话 用“,”隔开

      defaultZone: <http://localhost:18081/eureka/>
      

服务注册

1、 引入eureka- client依赖

<dependency>

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

2、在application.yml中配置eureka地址

eureka:

  instance:

    hostname: localhost

  client:

    service-url:

      defaultZone: <http://localhost:18081/eureka/>
      

服务发现

1、引入eureka-client依赖

2、在application.yml中配置eureka地址

3、给RestTemplate 添加@LoadBalanced(负载均衡)注解

在服务启动项中的RestTemplate添加负载均衡注解:

@Bean

@LoadBalanced

public RestTemplate restTemplate(){

return new RestTemplate();

}

调用服务的时候IP端口使用eureka注册的名称

4、用服务提供者的服务名称远程调用


关注微信公众号「BaseJ」,收看更多专题内容