• Eureka介绍
  • 工具准备
  • 步骤
    • 编写eureka server
    • 编写微服务应用:
    • 查询指定微服务在Eureka上的实例列表
  • Eureka的自我保护模式

Eureka介绍

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

Eureka包含两个组件:Eureka Server和EurekaClient,它们的作用如下:
●Eureka Server提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP、端口、微服务名称等),Eureka Server会存储这些信息。
●EurekaClient是一个Java客户端,用于简化与Eureka Server的交互。
●微服务启动后,会周期性(默认30s)地向Eureka Server发送心跳以续约自己的“租期”。

●如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销该实例(默认90s)。
●默认情况下,Eureka Server同时也是EurekaClient。多个Eureka Server实例互相之间通过复制的方式来实现服务注册表中数据的同步。
●EurekaClient会缓存服务注册表中的信息。这种方式有一定的优势——首先,微服务无须每次请求都查询Eureka Server,从而降低了Eureka Server的压力;其次,即使Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。 综上,Eureka通过心跳检查、客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性。

工具准备

IDEA、mysql、新建springboot项目、其他相关jar包


在maven官网都可以搜到。

步骤

编写eureka server

1.新建两个springboot工程文件(maven)
一个是eureka server

pom.xml

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>

yml:

server:port: 8761
eureka:client:register-with-eureka: falsefetch-registry: falseserviceUrl.defaultZone: http://localhost:8761/eureka/

●eureka.client.registerWithEureka:表示是否将自己注册到EurekaServer,默认为true。由于当前应用就是Eureka Server,故而设为false。
●eureka.client.fetchRegistry:表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。
●eureka.client.serviceUrl.defaultZone:设置与EurekaServer交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka;多个地址间可使用,分隔。

运行启动类:

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

注意
●在Spring Cloud Edgware之前,要想将微服务注册到Eureka Server或其他服务发现组件上,必须在启动类上添加@EnableEurekaClient或@EnableDiscoveryClient。
●在SpringCloud Edgware以及更高版本中,只需添加相关依赖,即可自动注册。这是由于在实际项目中,我们可能希望实现“不同环境不同配置”的效果,例如:在开发环境中,不注册到EurekaServer上,而是服务提供者、服务消费者直连,便于调测;在生产环境中,我们又希望能够享受服务发现的优势——服务消费者无须知道服务提供者的绝对地址。为适应该需求,Spring Cloud Commons进行了改进,相关Issue:https://github.com/springcloud/spring-cloud-commons/issues/218.
启动成功:

编写微服务应用:

依赖:

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- https://mvnrepository.com/artifact/com.h2database/h2 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.200</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

yml注册到eureka的配置

spring:application:name: clouddemo
server:port: 8000
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: true# 表示将自己的IP注册到eureka server,若不配置该属性或设置为false则表示注册微服务所在操作系统的hostname到eureka server

数据库配置:

spring.datasource.url=jdbc:mysql://localhost:3308/waimai?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.datasource.username=waimai
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
mybatis.type-aliases-package=com.example.springcloud.clouddemo.Entity

其中mybatis.type-aliases-package=com.example.springcloud.clouddemo.Entity
用于mybatis映射,由于用的是注解的方式所以只写这一句就好。
新建的数据表:

编写实体类、dao、controller层:
entity

@Data
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long Id;@Columnprivate String username;@Columnprivate String name;@Columnprivate Integer age;@Columnprivate BigDecimal balance;}

dao:
这里用的是注解的方式

@Mapper
public interface UserDao  {@Select("select Id,username,name,age,balance from userr")List<User>SelectUser();@Select("select Id,username,name,age,balance from userr where Id = #{Id}")User SelectoneUser(int Id);
}

controller:

@RestController
public class UserController {@Autowiredprivate UserDao userDao;@GetMapping("/{Id}")public User findById(@PathVariable int Id) {System.out.println("fds");User findOne = userDao.SelectoneUser(Id);return findOne;}
}

启动微服务后浏览器输入

可以看见返回了正确的一条数据,可见微服务启动成功。
然后刷新刚刚的eureka页面:

可以看到已经成功注册。

查询指定微服务在Eureka上的实例列表

修改上面微服务应用的controller:添加以下语句

import org.springframework.cloud.client.discovery.DiscoveryClient;@RestController
public class UserController {@Autowiredprivate UserDao userDao;@GetMapping("/{Id}")public User findById(@PathVariable int Id) {System.out.println("fds");User findOne = userDao.SelectoneUser(Id);return findOne;}@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/user")public List<ServiceInstance> showInfo(){return this.discoveryClient.getInstances("clouddemo");}
}

discoveryClient.getInstances可以用于查询指定微服务在eureka上的实例列表
打开浏览器:

Eureka的自我保护模式

进入自我保护模式最直观的体现,是EurekaServer首页输出的警告,如图

Eureka Server自我保护模式界面 默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销该实例(默认为90s)。但是当网络分区故障发生时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。 Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

在Spring Cloud中,可以使用eureka.server.enable-self-preservation=false禁用自我保护模式。
●Eureka与ZooKeeper做服务发现的对比:http://dockone.io/article/78.

在Status一栏有个UP,表示应用程序状态正常。应用状态还有其他取值,例如DOWN、OUT_OF_SERVICE、UNKNOWN等。只有标记为“UP”的微服务会被请求。 前文讲过,EurekaServer与EurekaClient之间使用心跳机制来确定EurekaClient的状态,默认情况下,服务器端与客户端的心跳保持正常,应用程序就会始终保持“UP”状态。

【过程记录】springcloud配置使用Eureka作服务发现组件并进行微服务注册相关推荐

  1. dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地

    将Dubbo微服务迁移到k8s中的思考与落地 说到容器化,不得不提kubernetes这个集群编排系统,它是一个开源系统,用于容器化应用的自动部署.扩缩和管理. Kubernetes 将构成应用的容器 ...

  2. 微服务最佳实践:MSE 微服务引擎

    简介:微服务引擎 MSE(Microservice Engine)是一个面向业界主流开源微服务框架 Spring Cloud 和 Dubbo 的一站式微服务平台.其由四个主要部分组成:微服务治理中心. ...

  3. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  4. 浅谈SpringCloud (二) Eureka服务发现组件

    上面学习到了如何由一个程序访问另一个程序,那么如果使用SpringCloud来进行访问,该如何访问呐? 可以借助Eureka服务发现组件进行访问. 可以借助官方文档:https://spring.io ...

  5. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  6. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...

    编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...

  7. Day2:SpringCloud入门学习——传智播客学习笔记【微服务电商】

    SpringCloud 0.学习目标 ·了解系统架构的演变 ·了解RPC与Http的区别 ·掌握HttpClient的简单使用 ·知道什么是SpringCloud ·独立搭建Eureka注册中心 ·独 ...

  8. eureka上的微服务不能通过服务名调用_掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地上篇...

    联席作者:吴毅挺 任浩军 张彬彬 廖梦鸽 张金星 胡振建 郑重鸣谢:Nacos - 彦林,Spring Cloud Alibab - 小马哥.落夜,Nacos 社区 - 张龙(pader).春少(ch ...

  9. spring cloud服务发现组件Eureka详解

    Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务.Spring Cloud将它集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务 ...

最新文章

  1. 描述linux目录结构以及目录结构命名规定
  2. VTK:标签轮廓用法实战
  3. oracle 最小系统,基于最小化CENTOS6.6最小化安装,oracle 11g 数据安装过程!
  4. Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.
  5. C#中常用的几种读取XML文件的方法
  6. Golden Master Pattern :一种在.NET Core中重构遗留代码的利器
  7. editor编辑器为什么头部信息会不见_简单聊一聊一个前端编辑器的性能优化
  8. python写前端和js_Python【13】【前端编程】- JS基础
  9. 松下抛却Jungle掌机研发项目
  10. 基金:能赚大钱的人往往会在3个方面谨慎
  11. 大学c语言程序设计上机题库,c语言上机题库(c语言程序设计基础题库)
  12. 上海富勒wms_国内WMS前三名是哪几家
  13. MIUI9线刷包精简
  14. 【Linux c】sipc
  15. 力扣每日一题-10-121.买股票最佳时机
  16. 阿里云构建仓库与镜像
  17. Common Data Model (CDM)通用数据模型1
  18. 身份证实名认证-身份实名认证-身份证核验
  19. MYSQL索引原理,优化SQL
  20. 是指使用计算机来加工管理,《运营管理》课程习题及答案-修订版(1)

热门文章

  1. 可视化mysql怎么导入sql文件_使用navicat导入sql文件的方法步骤
  2. oracle基础教程实验,Oracle 11g 基础教程与实验指导(配光盘)(清华电脑学堂)
  3. java 热补丁_Android热补丁之AndFix原理解析
  4. 【数据分析+建模案例】基于所给数据集对饭店流量指标进行预测
  5. nginx.conf 基本配置模板和结构
  6. 三十七、Redis和MongoDB基本语法
  7. zip: stdin: unexpected end of file tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable
  8. 工程制图 (装配图)
  9. ACL 2022 | 清华大学、DeepMind等指出现有小样本学习方法并不稳定有效,提出评价框架...
  10. 博士申请 | 香港科技大学谢知遥教授实验组招收机器学习全奖博士生