@Spring Cloud | NO.1 - 服务的注册与发现 [Eureka]

什么是Spring Cloud

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

以上内容为官方直译

版本说明

Spring Boot 2.0.1.RELEASE
Spring Cloud Finchley RC1
SpringCloud项目基于SpringBoot,所以学习SpringCloud之前需要对SpringBoot有一定的了解。

服务的注册与发现

服务发现是基于微服务架构的关键原则之一。Spring Cloud Netflix组件上的Eureka是一个服务注册与发现的模块(包含客户端和服务端)。可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他服务器。Eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成)。

Eureka - 服务注册中心

1. pom.xml中引入相关Maven依赖


    
    org.springframework.boot
    spring-boot-starter-parent
    2.0.1.RELEASE
     



    UTF-8
    UTF-8
    1.8



    
        
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    



    
        
        
            org.springframework.cloud
            spring-cloud-dependencies
            Finchley RC1
            pom
            import
        
    
注意: Eureka Server引入的Maven依赖中 artifactId有变动, SpringBoot2.0之前的版本为 spring-cloud-starter-eureka-server

2. SpringBoot启动器添加注解

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

3. application.yml配置

spring:
  application:
    name: eureka-server
server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
上述配置文件描述一个单节点注册中心,默认情况下Eureka Server也是一个Eureka Client,可通过 eureka.client.registerWithEureka:falsefetchRegistry:false来表明自己是一个Eureka Server。默认这两个属性值为 true

至此Eureka Server服务注册中心配置完毕。

4. 运行概览图

启动工程,访问 http://localhost:8761

因为没有服务注册,所以显示 No Instances Available

Eureka - 服务提供者

1. pom.xml中引入相关Maven依赖


    
    org.springframework.boot
    spring-boot-starter-parent
    2.0.1.RELEASE
     



    UTF-8
    UTF-8
    1.8



    
        
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    
    
        org.springframework.boot
        spring-boot-starter-web
    



    
        
        
            org.springframework.cloud
            spring-cloud-dependencies
            Finchley RC1
            pom
            import
        
    
注意: Eureka Client引入的Maven依赖中 artifactId有变动, SpringBoot2.0之前的版本为 spring-cloud-starter-eureka

2. SpringBoot启动器添加注解

@EnableEurekaClient
@SpringBootApplication
@RestController
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
    
    @Value("${server.port}")
    String port;
    @RequestMapping("/hi")
    public String home(@RequestParam String name) {
        return "hi "+name+",i am from port:" +port;
    }
}
在这个例子中,我们明确地使用 @EnableEurekaClient,但只有 Eureka可用,你也可以使用 @EnableDiscoveryClient

3. application.yml配置

spring:
  application:
    name: service-hi
server:
  port: 8762
eureka:
  client:
    service-url:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
  endpoints:
    web:
      exposure:
        include: "*"
Eureka Client提供者只需要注明注册自身服务的服务注册中心的地址即可。当客户端注册Eureka Server时,它提供关于自身的元数据,例如主机和端口,健康指示符URL,主页等。Eureka从属于服务的每个实例接收心跳消息。如果心跳失败超过可配置的时间表,则通常将该实例从注册表中删除。

其中defaultZone是一个魔术字符串后备值,为任何不表示首选项的客户端提供服务URL(即它是有用的默认值)。

需要指明spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name 。

注意: SpringBoot2.0之后大部分endpoints不会被暴露,上面我们暴露了所有endpoints,如应用到生产环境,考虑到安全问题,对于Actuator的Endpoints请根据需要进行配置

至此Eureka Client服务提供者配置完毕。

4. 运行概览图

启动工程,访问 http://localhost:8761

服务名为SERVICE-HI已经注册到注册中心。

打开 http://localhost:8762/hi?name... ,返回如下结果:

hi forezp,i am from port:8762

附加说明

  1. 本文参考资料
  • spring-cloud-eureka-server 官方文档
  • spring-cloud-eureka-client官方文档
  • spring-cloud 中文文档参考手册
  • 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

你可能感兴趣的:(springcloud,spring)