zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java语法总结 线程
    Java多线程编程总结
    eclipse插件开发
    Java私塾的一些基础练习题(一)
    反射练习
    内部类实现动态链表(增,删,查,打印)
    oracle 存储过程第四天
    java 面向对象个人理解
    jsp的flash小例子
    oralcle 存储过程批处理
  • 原文地址:https://www.cnblogs.com/coding-one/p/12173343.html
Copyright © 2011-2022 走看看