[微服务系列] 服务治理--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 条评论
登录 后参与评论

相关文章

来自专栏CodeSheep的技术分享

RPC框架实践之:Apache_Thrift

2338
来自专栏happyJared

Docker + Elasticsearch 集群环境搭建

无论是安装包形式还是基于Docker,搭建Elasticsearch集群环境还是较为简单的,实操的时候还遇到过一丢小问题,本文用于记录下操作过程。

683
来自专栏小勇DW3

亿级流量场景下,大型缓存架构的虚拟机环境搭建

静态模板是固定的 数据库中的数据全量喧嚷到模板中,下次请求来了直接返回,速度也很快;

1184
来自专栏云知识学习

kubectl配置单、多集群访问

您可以通过 Kubernetes 命令行工具 kubectl 从本地客户端机器连接到 TKE 集群。

1482
来自专栏Theo Tsao

Linux网络管理

本文包括: 查看网络接口、配置网络接口、重启网络接口、路由命令 route、主机名称命令 hostname、网络工具

742
来自专栏分布式系统和大数据处理

Kafka分布式消息系统(搭建Zookeeper集群) - Part.2

kafka使用zookeeper来管理Brokers(kafka服务进程)、执行partition(分区)的leader选举、当出现变更时向kafka发送通知(...

1092
来自专栏Hadoop实操

如何将HDFS文件系统挂载到Linux本地文件系统

Hadoop支持通过NFSv3挂载HDFS文件系统到本地目录,允许用户像访问本地文件系统一样访问HDFS,对于普通用户来说大大的简化了HDFS的使用。该功能通过...

6777
来自专栏Java Edge

SpringCloud微服务实战(三)-服务注册与发现

6318
来自专栏猿天地

Spring Cloud Eureka 集群高可用

在微服务架构中,注册中心是一个必不可少的组件 前面我们搭建的注册中心只适合本地开发使用,在生产环境必须搭建一个集群来保证高可用 Eureka的集群搭建很简单,每...

3686
来自专栏运维小白

14.3 NFS配置选项

NFS配置选项 rw 读写 ro 只读 sync 同步模式,内存数据实时写入磁盘,相应的就会降低磁盘效率 async 非同步模式,它会每隔一段时间才会将数据刷新...

1886

扫码关注云+社区