Spring Cloud 学习——2. 服务注册与发现简单示例

1. 前言

  概述Spring Cloud 集成了 Eureka 作为注册中心,来实现服务的注册与发现。

 

2. Eureka 概述

  在一个微服务架构的系统中,服务之间要想能够相互调用,那么服务调用者(后文叫消费者)必须要知道被调用(提供者)相关信息,比如提供者的服务地址、健康状态等等。而在一个大型的系统中,可能存在种类和数量都非常庞大的这种微服务,如果所有的微服务之间都是两两直接配置和维持心跳的话,那么服务就不用做其它的事了,光维持心跳就够了,而且配置也会非常的繁琐。所以,必须要有一个管理者来集中管理这些五花八门的服务。这个管理者至少需要管理这些信息:

    2.1. 系统中存在哪些种类的微服务(比如:用户服务、商品服务、订单服务)

    2.2. 每种服务的调用方式(也就是访问路径。如果不提供调用,那么还能叫服务吗)

    2.3. 每种服务的实例信息(虽然可能某一种微服务是集群部署,但是最后业务访问的时候,还是需要具体到某一台具体的服务器上去)

    2.4. 每一个服务实例的健康状态(如果一个实例因为某种原因导致不能提供服务了,那么这个管理者必须要及时知道,并做到不让请求触达它。一般通过心跳来检测健康状态)

  想要掌握这些信息,那么所有的服务必须到这个管理者来注册,并提供自己的一些元数据信息(比如:服务名、实例ID等)。所以我们把这个负责注册的管理者叫做服务注册中心。Eureka 就是提供这么一个注册中心的组件。

  

3. Eureka 模式图(引用:https://www.cnblogs.com/gdjlc/p/11784681.html):

    

 

 

   从图中我们应该了解到以下几点信息:

    3.1. Eureka 包含两个部分:Eureka server 和 Eureka client 。Eureka server 就是注册中心,也就是前面讲到服务管理者;Eureka client 就是具体的需要注册的服务

    3.2. Eureka server 和 Eureka client 之间主要有两个交互:

      3.2.1. client 向 server 注册,提供自己的注册信息;

      3.2.2. client 向 server 查找服务,server 为其提供可供调用的服务(可能是其它服务,也包括它自己)

    3.3. 不管是服务提供者还是消费者,都需要注册。这个并不难理解,因为如果你不注册,我通过什么途径给你提供服务呢?而且在实际项目中,往往一个应用既是服务提供者也是服务消费者

    3.4. Eureka server 支持多节点。这样做的目的当然是提高可靠性。试想所有的服务都靠注册中心来保持联系,那如果注册中心挂了岂不是整个系统就不可用了!所以在一个高可靠性的微服务系统中,注册中心的多节点支持是必须要有的

 

4. 编码实现

  4.1. 实现 Eureka server

    4.1.1. 创建一个spring boot 工程:

      略

    4.1.2. 添加依赖  

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

    4.1.3. 声明为 Eureka server

      在启动类上加上注解  @EnableEurekaServer :

      

 

 

     4.1.4. 不注册自己

      在 Eureka 的模型中,server 和 client 都是 instance,所以默认会将 server 也进行注册。可以通过下述两个配置禁用 Eureka 注册自己(在 application.properties 中)

      

 

 

     4.1.5. 仪表盘配置

      

 

      仪表盘是 Eureka 提供的一个简单的可视化界面,用来查看注册的服务实例。值得说明的是, eureka.dashboard.path 配置的路径是相对于应用的 context-path 的路径,如果你应用的  server.servlet.context-path=/eureka/server ,那么最终的 仪表盘访问路径就是 http://localhost:${server.port}/eureka/server/dashboard

    4.1.6. 启动 Eureka server,访问仪表盘的结果:

      

 

   4.2. 编写服务

    4.2.1. 创建一个 spring boot 工程

      略

    4.2.2. 添加依赖

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

    4.2.3. 声明为 Eureka client

      在启动类上添加注解  @EnableEurekaClient (或者  @EnableDiscoveryClient ,它包含前者)

      

 

    4.2.4. 配置注册信息

      

 

     4.2.5. 初始化 rest 工具

      

 

     4.2.6. 调用服务

      编写一个简单的 Controller ,实现调用

      

 

       这里,我们写了两个服务接口:主页服务接口(/)和 欢迎页服务接口(/welcome),欢迎页服务接口返回它调用的主页服务接口的结果。在这个例子里面,同一个应用既是服务提供者也是服务消费者。

    4.2.7. 启动服务,测试

      4.2.7.1. 我们先来看一下注册中心的仪表盘是否已经有了服务注册

        

 

         可以看到,现在仪表盘显示已经有一个服务实例注册了,就是我们上面编写的 sys 服务

      4.2.7.2. 下面分别访问两个服务接口

        主页:

          

 

           可以看到,返回了预期的结果。

        欢迎页:

          

          

 

 

          也返回了预期的结果,说明服务调用成功了。

 

 

参考:

  https://www.cnblogs.com/gdjlc/p/11784681.html

posted @ 2020-02-11 16:07  不爱刺猫的鱼  阅读(233)  评论(0编辑  收藏  举报