微服务的发现与注册--Eureka

服务提供者、服务消费者、服务发现组件三者之间的关系

1)各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息
2)服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口
3)各个微服务与服务发现组件使用一定机制(例如心跳)通信。服务发现组件如长时间无法与某微服务实例通信,就会注销该实例。

4)微服务网络地址发生变更(如实例增减或者IP端口发生变化等)时,会重新注册到服务发现组件。使用这种方式,服务消费者就无须人工修改提供者的网络地址了。

Eureka 简介

Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含Server和Client两部分。
Spring Clound将它集成在子项目Spring Cloud Netflix中,从而实现微服务的注册与发现。

Eureka的Github地址:https://github.com/Netflix/Eureka

Eureka Server

提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP,端口,微服务名称等),Eureka Server会存储这些信息

Eureka Client

Eureka Client是一个java客户端,用于简化与Eureka Server的交互。微服务启动后,会周期性(默认30秒)地向Eureka Server发送心跳以续约自己的“租期”。
如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)

编写Eureka Server

1)创建一个ArtifacId是Maven工程,添加以下依赖

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

2)编写启动类,在启动类上添加@EnableEurekaServer注解,声明这是一个Eureka Server

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

3)在配置文件application.yml中添加以下内容

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

说明:
registerWithEureka:表示是否将自己注册到Eureka Server,默认为true.
fetchRegistry:表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server的数据,故设为false.
defaultZone:设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。多个地址可用,分隔。

这样一个Eureka Server就编写完成了。

将微服务注册到Eureka Server

1)在微服务项目里pom.xml添加以下依赖

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

2)配置文件aplication.yml中添加以下配置

spring:
  application:
    name: microservice-provider-user # 应用名
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9999/eureka
  instance:
    prefer-ip-address: true

3)编写启动类,添加@EnableDiscoveryClient注解声明这是一个Eureka Client.

@EnableDiscoveryClient
@SpringBootApplication
public class ProviderUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(LicenseApplication.class, args);
    }
}
关注公众号githubcn,免费获取更多学习视频教程

posted @ 2019-01-25 14:28  软件技术开发  阅读(473)  评论(0编辑  收藏  举报