[微服务系列] 服务治理--Eureka

一、服务治理

所谓服务治理就是用来实现各个微服务实例的自动化注册于发现。当多个微服务互相调用时,就需要维护一个静态的配置文件,来说明各自所承担的服务内容、地址、端口等信息,其他服务调用时,就需要去查询这个配置文件,以获取服务。但是随着业务的发展,系统功能越发变得复杂,之前的静态配置文件维护起来也越发的耗费精力时间,并且由于需求的不管变更,使得服务的命名、地址都会发生变化,所以为了解决这样的问题,在微服务架构中,会使用服务治理来注册和发现微服务中的实例,并进行统一的管理。

二、服务的注册与发现

关系调用说明:

  • 服务生产者启动时,向服务注册中心注册自己提供的服务
  • 服务消费者启动时,在服务注册中心订阅自己所需要的服务
  • 注册中心返回服务提供者的地址信息个消费者
  • 消费者从提供者中调用服务

三、Eureka

Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来。 Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。 客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。

四、使用Eureka进行服务治理

1. 搭建服务注册中心

单独创建一个Springboot项目,并添加如下的依赖

<dependencies>
    <!--添加Eureka服务器端依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>Brixton.SR5</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
</dependencyManagement>

在Springboot项目中的main入口,添加@EnableEurekaServer注解,来开启服务注册中心

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

在默认情况下,服务注册中心也会把自己当做是一个服务,将自己注册进服务注册中心,所以我们可以通过配置来禁用他的客户端注册行为,在application.properties中添加如下配置:

server.port=3333

eureka.instance.hostname=localhost
#不要向注册中心注册自己
eureka.client.register-with-eureka=false
#禁止检索服务
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

启动应用,并访问http://localhost:3333/即可看到Eureka信息面板,如下:

从上图看到,在”Instances currently registered with Eureka”信息中,没有一个实例,说明目前还没有服务注册。

2. 注册服务

基于文章[微服务系列] 微服务构建框架—Spring Boot中构建的第一个Springboot项目,来进行改造。首先在pom文件中添加Eureka客户端相关的依赖:

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

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.RS5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在之前的TestRestful方法中添加如下代码,将org.springframework.cloud.client.discovery.DiscoveryClient;对象注入,并且在日志中打印出与服务相关的一些信息。

@RestController
public class TestRestful {    

    private final Logger logger=Logger.getLogger(getClass());    

    @Autowired
    private DiscoveryClient client;    
    
    @RequestMapping(value = "/hello",method = RequestMethod.GET)    
    public String home(){
        ServiceInstance instance=client.getLocalServiceInstance();
        logger.info("serviceId"+instance.getServiceId()+"host:post="+instance.getHost()+":"+instance.getPort());        
        return "hello spring";
    }
}

在主类上添加@EnableEurekaClient注解以实现Eureka中的DiscoveryClient实现。

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

最后在配置文件application.yml中配置与服务相关的一些基本信息,如服务名、注册中心地址(即上一节中设置的注册中心地址http://localhost:3333/eureka)

#  设置服务名spring:  
application:    
    name: 
        hello-service
#  设置注册中心地址
eureka:  
    client:    
        service-url:      
            defaultZone: http://localhost:3333/eureka
3. 测试
  1. 启动注册中心服务
  2. 启动springbootdemo项目,可以看到如下的信息,说明此服务已经注册在了注册中心

同时访问http://localhost:3333/可以在Instances currently registered with Eureka中看到已经有一个服务注册了进来,并且名称为HELLO-SERVICE的服务

3. 访问http://localhost:8088/hello可以在控制台中看到如下日志信息:

五、 小结

在本文中,主要介绍在微服务中服务治理的基本概念,通过简单的实践,搭建单节点服务注册中心,并实现了服务的注册,了解服务治理的基本工作流程。

原文发布于微信公众号 - 瞎说开发那些事(jsj201501)

原文发表时间:2017-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏日常分享

Spring 学习笔记(一)——Spring 基本概念和体系概览

简而言之,Spring 是一个轻量级的IoC(控制反转)和AOP(面向切面)的容器框架。

963
来自专栏好好学java的技术栈

springmvc带你学:带你入门

传统MVC——>JSPModel2——>Front Controller + Application Controller + Page Controller ...

771
来自专栏EAWorld

对没有监控的微服务Say No!

目录: 一、监控简介 二、监控策略 三、总结 一、监控简介 微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用...

4475
来自专栏友弟技术工作室

(效率人生)MAC必备工具Alfred入门使用前言如何获取Alfred如何打开AlfredGeneral(通用界面)Features(特性界面)Advanced(高级设置)

1. General:通用; 2. Features:特性; 3. Workflows:工作流; 4. Appearance:外观; 5...

1071
来自专栏SDNLAB

从一个 Neutron DHCP 补丁谈起

前言 前几个星期,社区通过了一个 Patch 来解决一个遗留很久的 DHCP 相关的问题,这个 Patch 并不复杂(review 地址是 https://re...

3767
来自专栏全栈架构

swagger-edit写接口文档神器的部署和使用

swagger 是一套开源的API设计工具,包括Swagger UI,Swagger Editor等。

932
来自专栏前端黑板报

Spring Boot 入门

一直想尝试Java-web开发,无奈配置太复杂。就是这个spring-boot也是尝试几次无果。昨天晚上决定再试一次,居然奇迹般的可以运行了。 选择spring...

2367
来自专栏全华班

springcloud学习手册-Eureka(第一节)

导读 |Springcloud Eureka 服务治理 一、服务治理:Springcloud Eureka Eureka是springcloud Netfli...

3916
来自专栏专注研发

MyBatis Generator的使用

对于自动生成这件事吧,我本人中立,一直没用过,主要是因为浅尝辄止,它生成的东西有些懒得看,用一下还是挺舒服的

2522
来自专栏SpringBoot 核心技术

第四十章:基于SpringBoot & Quartz完成定时任务分布式多节点负载持久化

40212

扫码关注云+社区