美文网首页
Spring Cloud 应用篇 之 Eureka 初体验

Spring Cloud 应用篇 之 Eureka 初体验

作者: shmilyahu | 来源:发表于2018-09-15 11:40 被阅读0次

    (一)Spring Cloud 简介

    Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

    (二)搭建服务注册中心 Eureka

    Spring Cloud Eureka是 Spring Cloud Netflix 服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能。

    1.构建一个 maven 主项目


    20180531110317718.png

    注:这里 Create from archetype 可以不用勾选,直接构建一个空的 maven 项目。

    可以在 maven 主项目里统一管理各个子项目所引用的依赖版本,这一系列项目所用的 Spring Cloud 版本为 Finchley.RC1, Spring Boot 版本为 2.0.1.RELEASE, JDK 为 1.8

    pom.xml 文件部分如下

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-cloud.version>Finchley.RC1</spring-cloud.version>
            <spring-boot.version>2.0.1.RELEASE</spring-boot.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    1. 创建一个 module,作为服务注册中心 Eureka Server


      20180531111814575.png

    注:这里 Create from archetype 仍然不用勾选,直接构建一个空的 maven 项目。

    创建完工程后,在 pom.xml 文件中引入依赖

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

    3. 启动类

    只需要在 Spring Boot 工程的启动 EurekaServiceApplication 类上加 @EnableEurekaServer 注解。

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

    4. Eureka 的配置文件 application.yaml

    server:
      port: 8761
    spring:
      application:
        name: eureka-service
    eureka:
      instance:
        hostname: localhost
      client:
        #由于该应用为注册中心,设置为false,表明不向注册中心注册自己
        register-with-eureka: false
        #是否从eureka服务器获取注册信息,这里不需要
        fetch-registry: false
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    logging:
      level:
        com:
          netflix:
            eureka: OFF
            discovery: OFF
    

    Eureka 是一个高可用的组件(后续会配置),每一个实例注册之后需要向注册中心发送心跳,在默认情况下 erureka server 也是一个eureka client ,必须要指定一个 server,通过 eureka.client.register-with-eureka:false 和 fetch-registry:false 来设置自己是一个eureka server

    5. 运行 EurekaServiceApplication 启动服务

    在浏览器中输入http://localhost:8761,就可以看到Eureka的管理界面

    2018053111444680.png

    当前因为还没有服务注册进来,所以是 No instances available

    (三)服务注册与发现:注册服务提供者

    1. 创建一个 module,作为服务提供者,与创建 Eureka 类似

    2. 添加 pom 依赖

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

    3. 启动类

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

    通过注解@EnableEurekaClient 表明自己是一个 EurekaClient。

    @EnableEurekaClient 注解是基于 spring-cloud-netflix 依赖,只能 eureka 使用

    还可以使用 @EnableDiscoveryClient

    @EnableDiscoveryClient 注解是基于 spring-cloud-commons 依赖,并且在classpath中实现

    4. 写一个服务接口

    @RestController
    public class PortService {
    
        @Value("${server.port}")
        String port;
    
        @RequestMapping("port")
        public String getPort() {
            return "Hello World, I'm from port : " + port;
        }
    }
    

    5. 配置文件 application.yaml

    server:
      port: 8281
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    spring:
      application:
        name: spring-demo-service
    

    6. 启动应用


    20180531125144892.png

    在Eureka的控制台上已经看到应用名,证明服务提供者已经成功注册在Eureka上了

    7. 在浏览器输入 http://localhost:8281/port,如下

    2018053112535459.png

    源码下载:https://github.com/shmilyah/spring-cloud-componets

    相关文章

      网友评论

          本文标题:Spring Cloud 应用篇 之 Eureka 初体验

          本文链接:https://www.haomeiwen.com/subject/grvzgftx.html