文章目录

  • 服务发现组件概述
  • Eureka概述
  • Eureka原理
  • Maven父子工程的搭建
  • Eureka Server的搭建
    • 新建 Maven Module
    • 添加spring-cloud-starter-eureka-server依赖
    • 启动类增加@EnableEurekaServer注解
    • 配置文件配置Eureka等信息
    • 启动Eureka Server测试
  • Github 代码

服务发现组件概述

上篇文章 Spring Cloud-01服务提供者与服务消费者 中,我们通过配置文件的方式来配置服务提供者的地址,有两个缺点

  1. 如果服务提供者的ip和端口发生变化,将会影响服务消费者,服务消费者需要也跟着修改
  2. 高可用需要依赖第三方,通常情况下每个微服务都会部署多个实例,实现负载均衡和容灾,上篇博文中的例子在高可用上需要依赖第三方的组件比如Nginx、F5、HAProxy等

显然通过硬编码的方式无法满足上述的需求。


在微服务中,服务发现组件的位置如下

关系如上图

  • 各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中
  • 服务消费者可以从服务发现组件中查询服务提供者的地址,并使用该地址调用服务提供者的提供的接口
  • 各个微服务与服务发现组件在使用一定的机制(比如心跳机制)来通信。当服务发现组件长时间无法与某微服务实例通信,将注销该实例
  • 微服务网络地址发生变更(比如实例增减或者ip端口发生变化)时,会重新注册到服务发现组件。 使用这种方式,服务消费者就无需人工修改提供者的网络地址了。

Spring Cloud支持Eureka 、Consul 、Zookeeper 等。

这里我们主要介绍的Eureka


Eureka概述

Eureka是Netflix开源的服务发现组件,一个基于REST的服务。 包含Server和Client两部分。 Spring Cloud将它集成在子项目Spring Cloud Netflix中,从而实现微服务的注册与发现

https://github.com/Netflix/eureka


Eureka原理

官网上的图 https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance

由上图可知,Eureka包含 Eureka Server和 Eureka Client

  • Eureka Server: 提供服务发现的能力,各个微服务启动时,会向Eureka Server注册信息,比如ip、端口、微服务名称等。 Eureka Server会存储这些信息

  • Eureka Client: Java 客户端,用于简化与Eureka Server的交互

  • 微服务启动后,会周期性(默认30S)向Eureka Server发送心跳以续约自己的“租期”

  • 如果Eureka Server在一定时间内(默认90S)没有接收到某个微服务实例的心跳,Eureka Server将注销该实例。

  • 默认情况下,Eureka Server 同时也是 Eureka Client . 多个Eureka Server之间通过复制的方式来实现服务注册表中数据的同步

  • Eureka Client会缓存服务注册表中的信息,两个好处 第一,微服务无需每次都请求查询Eureka Server ,降低Server的压力。 第二,即使Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。


Maven父子工程的搭建

这一步不是必须的,这里我们为了方案管理依赖

首先我们将上篇博客中用到的provider和consumer中也放到父工程中去管理,简单说下操作步骤

  • 新建个maven 工程作为父工程,删除多余的文件和目录,仅保留pom.xml即可。
  • 在maven父工程上右键,选择maven module,新建子模块即可。

更多的父子工程信息, 请参考 http://www.cnblogs.com/telwanggs/p/7016561.html

如何搭建也可以参考 https://blog.csdn.net/NancyWu_LuckyGirl/article/details/80244589

父工程的pom.xml 如下

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- http://www.cnblogs.com/telwanggs/p/7016561.html --><groupId>com.artisan</groupId><artifactId>microservice-spring-cloud</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>microservice-spring-cloud</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><modules><module>micorservice-provider-user</module><module>micorservice-consumer-movie</module><module>microservice-discovery-eureka</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version></parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

http://spring.io/projects/spring-cloud#overview

注意Spring boot 和 Spring Cloud的对应关系,否则启动可能会出错。


Eureka Server的搭建

Finchley版本的官方指导手册: https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-eureka-server.html

新建 Maven Module

在父工程 microservice-spring-cloud 上右键 New ,选择


添加spring-cloud-starter-eureka-server依赖

<dependency> <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.6.RELEASE</version>
</dependency>

启动类增加@EnableEurekaServer注解

package com.artisan.microservice.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {public static void main(String args[]) {SpringApplication.run(EurekaApplication.class, args);}}

配置文件配置Eureka等信息

server:port: 8761
eureka:client:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://localhost:8761/eureka
  • eureka.client.register-with-eureka: 是否将自己注册到Eureka Server ,默认为true.因为当前应用是作为Eureka Server用,因此设置为false

  • eureka.client.fetch-registry:是否从Eureka Server获取注册信息,默认为true, 因为我们这里是个单节点的Eureka Server ,不需要与其他的Eureka Server节点的数据,因此设为false

  • eureka.client.service-url.defaultZone : 设置与Eureka Server交互的地址,查询服务和注册服务都依赖这个地址,默认为 http://localhost:8761/eureka ,多个地址可使用 , 分隔。


启动Eureka Server测试

访问 http://localhost:8761/


Eureka Server 首页展示的信息包括 当前实例的系统状态、注册到Eureka Server的服务实例、常用信息、实例信息等 。

我们这里看到是空的

因为没有微服务注册上来,下面我们来看下如何将我们改造的用户微服务和电影微服务注册到Eureka Server上来吧。


Github 代码

https://github.com/yangshangwei/SpringCloudMaster

Spring Cloud【Finchley】-02服务发现与服务注册Eureka + Eureka Server的搭建相关推荐

  1. Spring Cloud Finchley版中Consul多实例注册的问题处理

    由于Spring Cloud对Etcd的支持一直没能从孵化器中出来,所以目前来说大多用户还在使用Eureka和Consul,之前又因为Eureka 2.0不在开源的消息,外加一些博眼球的标题党媒体使得 ...

  2. Spring Cloud【Finchley】- 21 Spring Cloud Stream 构建消息驱动微服务

    文章目录 概述 添加依赖 配置文件配置RabbitMQ的地址信息 接口定义 接收方 @EnableBinding @StreamListener 测试 消费组 发送复杂对象 消息回执 代码 概述 官网 ...

  3. Spring Cloud Alibaba 学无止境:下一代微服务架构的规划与展望

    终于到了课程的最后一讲,本讲我们将对整个微服务架构和 Spring Cloud Alibaba 进行总结和展望.Spring Cloud Alibaba 是优秀的国产微服务架构解决方案,在基于 Spr ...

  4. Dubbo将积极适配Spring Cloud生态,Spring Cloud体系或将成为微服务的不二选择!

    2016年,我在博客中发表过一篇<微服务架构的基础框架选择:Spring Cloud还是Dubbo?>(http://blog.didispace.com/microservice-fra ...

  5. spring cloud java b2b2c o2o分布式 微服务电子商务平台

    大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 需要JAVA Spring Cloud大型企业分布式 ...

  6. spring解耦_云端时代的解耦:使用Spring Cloud Azure构建云端原生微服务

    spring解耦 重要要点 云本机应用程序应充分利用云的优势,而不仅仅是迁移到云中 通过在云计算环境上运行,微服务与云原生环境并驾齐驱 集中配置,服务发现,异步消息驱动和分布式跟踪是微服务基础架构 S ...

  7. Spring Cloud 参考文档(Spring Cloud Context:应用程序上下文服务)

    Spring Cloud Context:应用程序上下文服务 Spring Boot有一个关于如何使用Spring构建应用程序的观点,例如,它具有通用配置文件的常规位置,并具有用于通用管理和监控任务的 ...

  8. Spring Cloud Gateway 结合 OAuth2 提供 UAA 服务,来袭。

    微服务做用户认证和授权一直都是一个难点,随着 OAuth2.0 的密码模式被作废,更是难上加难了.今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出 ...

  9. Spring Cloud Gateway 结合OAuth2提供UAA服务

    微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了.今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了 ...

  10. Spring Cloud Finchley OpenFeign的重试配置相关的坑

    如题,本文基于Spring Cloud Finchley.SR2 OpenFeign的重试 OpenFeign配置重试后,逻辑分析 对比Daltson和Finchley的基本组件,发现Ribbon还有 ...

最新文章

  1. EMNLP2020:Hugging Face获最佳demo
  2. 图解VC++2012编译安装GDAL1.11.0和入门例子
  3. Cmd Markdown 公式指导手册
  4. 【工具类】工具相关参考文档汇总
  5. notification源码分析_Ceilometer之notification agent代码分析
  6. 使用securecrt在本地与服务器之间上传下载数据
  7. 30 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义更新
  8. 真正聪明的人必有的4个习惯
  9. 分类问题的评估指标一览
  10. c语言如何输出10个空格,新人提问:如何将输出时每行最后一个空格删除
  11. OneDrive 挂载为本地磁盘Ubuntu
  12. 用js写出水仙花数_JavaScript求取水仙花数
  13. delphi math 单元函数
  14. 第十三周作业-必做3
  15. MySQL重做日志文件放在磁盘_重做日志文件
  16. java map替换_在java的Map集合中,怎样更改value的值
  17. # BJTUOJ 一颗姜会长多高? (二分+前缀和+简单贪心)
  18. CentOS8搭建FTP服务器
  19. Day11:文件和异常
  20. 自动化运行JMeter下的所有脚本

热门文章

  1. kotlin 反射java类_关于Kotlin反射中实例化类的问题
  2. tf.dynamic_stitch 和  tf.dynamic_partition
  3. 神经网络激活函数链接
  4. 成语json_cocos creator实战(2)成语小秀才ts版
  5. 150. Leetcode 860. 柠檬水找零 (贪心算法-基础题目)
  6. Leetcode 83 删除排序链表中的重复元素 (每日一题 20210804)
  7. Leetcode 435.无重叠区间 (每日一题 20210708 同类型题)
  8. torch_geometric笔记:nn. graclus (图点分类)
  9. Flink从入门到精通100篇(二十)-Zeppelin SDK在Flink 中的应用(附测试代码)
  10. Hadoop学习之以全分布模式部署及问题