前言:不忘初心,寻找最初的编程快感!

1.简介

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

2.快速搭建

实现步骤如下:

  1. 搭建Eureka服务注册中心
  2. 搭建Eureka服务提供者
  3. 搭建Eureka服务调用者
  4. 测试

Eureka服务注册中心

  1. 创建eureka-service项目
  2. 在pom.xml中添加相关依赖
   <?xml version="1.0" encoding="UTF-8"?>
<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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.eureka</groupId><artifactId>eureka-service</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>2.2.4.RELEASE</version>
<!--            在tomcat-embed-core-9.0.17.jar和servlet-api-2.5.jar里面都有javax.servlet.ServletContext, 而这个类在eureka中使用默认用了servlet-api-2.5.jar进行-->
<!--            告诉spring-cloud-starter-netflix-eureka-server 不要把servlet-api引进来--><exclusions><exclusion><artifactId>servlet-api</artifactId><groupId>javax.servlet</groupId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
  1. 配置yml文件
server:port: 1111eureka:instance:hostname: localhostinstance-id: ${spring.application.name}:${random.value}client:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:application:name: eureka-service

register-with-eureka: false #表明该服务不会向Eureka Service注册自己信息
fetch-registry: false #表明该服务不会向Eureka Service获取注册信息
service-url: #注册中心地址
4. 创建Application启动类

@SpringBootApplication
//标识该服务为注册中心
@EnableEurekaServer
public class EurekaServiceApplication {public static void main(String[] args) {SpringApplication.run(EurekaServiceApplication.class,args);}
}
  1. 启动应用,在浏览器中查看http://localhost:1111/

Eureka服务生产者

  1. 创建eureka-service-producer项目
  2. 在pom.xml中添加相关依赖
  <?xml version="1.0" encoding="UTF-8"?>
<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><groupId>com.eureka.service.producer</groupId><artifactId>eureka-service-producer</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>
  1. 配置yml文件
server:port: 10101eureka:instance:hostname: clientinstance-id: ${spring.application.name}:${random.value}client:service-url:defaultZone: http://localhost:1111/eureka/
spring:application:name: eureka-service-producer
  1. 创建服务提供方接口
@RestController
public class HelloController {@RequestMapping(value = "/hello/{name}")public String hello(@PathVariable("name") String name){return "Eureka Service Producer say hello,".concat(name);}}
  1. 创建启动类
@SpringBootApplication
public class EurekaServiceProducerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServiceProducerApplication.class,args);}
}
  1. 启动应用,将服务注册至注册中心,在浏览器中查看http://localhost:1111/

Eureka服务消费者

  1. 创建eureka-service-consumer项目
  2. 在pom.xml中添加相关依赖
  <?xml version="1.0" encoding="UTF-8"?>
<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><groupId>com.eureka.service.consumer</groupId><artifactId>eureka-service-consumer</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>
  1. 配置yml文件
server:port: 10102eureka:instance:hostname: clientinstance-id: ${spring.application.name}:${random.value}client:service-url:defaultZone: http://localhost:1111/eureka/
spring:application:name: eureka-service-consumer
  1. 消费服务提供方接口
@RestController
@Configuration
public class SayHelloController {private final static String url = "http://eureka-service-producer/hello/{name}";@Value("${spring.application.name}")private String name;@AutowiredRestTemplate restTemplate;@RequestMapping(value = "/sayHello")public String sayHello(){String str = restTemplate.getForEntity(url,String.class,name).getBody();return str;}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}
  1. 创建启动类
@SpringBootApplication
public class EurekaServiceConsumerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServiceConsumerApplication.class,args);}
}
  1. 启动应用

  2. 调用服务生产方接口

调用出现500问题,配置hosts文件得以解决(在hosts文件中加入127.0.0.1 client)

Spring Cloud -> Spring Cloud Netflix Eureka快速搭建(一)相关推荐

  1. idea springmvc_SSM三大框架使用Maven快速搭建整合(SpringMVC+Spring+Mybatis)

    本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...

  2. 玩转springboot2.x之快速搭建(start.spring.io)

    之前已经通过2篇博客介绍如何使用 IntellJ IDEA  和 Spring Tool Suite(STS)快速启动springboot2.0项目,今天我们来介绍一下如何通过访问 https://s ...

  3. spring cloud快速搭建

    为什么80%的码农都做不了架构师?>>>    一:注册中心 + 服务提供者(简单) 注册中心本身就可以是服务提供者,如果有需求可以分开. 1:pom.xml <?xml ve ...

  4. spring boot / cloud (十七) 快速搭建注册中心和配置中心

    spring boot / cloud (十七) 快速搭建注册中心和配置中心 本文将使用spring cloud的eureka和config server来搭建. 然后搭建的模式,有很多种,本文主要聊 ...

  5. Spring Cloud Eureka(一)搭建一个注册中心

    Spring Cloud Eureka(一)搭建一个注册中心 服务治理 名词解释 spring cloud eureka:spring cloud eureka 使用Netflix Eureka来服务 ...

  6. [Spring-cloud-eureka]使用 gradle, spring boot,Spring cloud Eureka 搭建服务注册中心

    2019独角兽企业重金招聘Python工程师标准>>> Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,它基于 Netfli ...

  7. 破甲两千六 Spring Cloud 教程(三):添加Spring Cloud 的 Netflix Eureka 插件,实现服务端、客户端的发现与注册

    写在前面: Spring Cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等. 5大常用组件: 服务发现 ...

  8. Spring Cloud Netflix Eureka 配置参数说明

    为什么80%的码农都做不了架构师?>>>    Eureka Client 配置项(eureka.client.*) org.springframework.cloud.netfli ...

  9. Spring Cloud Netflix Eureka client源码分析

    1.client端 EurekaClient提供三个功能: EurekaClient API contracts are: * - provide the ability to get Instanc ...

最新文章

  1. 基于ECS部署LAMP环境搭建Drupal网站,云计算技术与应用报告
  2. insert 语句_[原理解析] MySQL insert语句的磁盘写入之旅
  3. 相对完善的Java通过JDBC操纵mysql的例子
  4. Java类class isSynthetic()方法及示例
  5. SCOPE_IDENTITY和@@identity的区别
  6. Android安全笔记-Android签名文件及初略架构
  7. linux rdma测试,硬件RDMA的驱动配置和测试
  8. 设计一个完善可用的服务框架
  9. vscode 模拟本地服务器打开文件,设置默认浏览器为chrome
  10. HTML全面深入学习-用label获得焦点
  11. 职业技能鉴定准考证打印系统
  12. 《“灯谜”系统--“定单”辅助产生系统》
  13. 计算机考研复试之操作系统
  14. vb.net html元素,vb.net 教程 12-3 HtmlElement类 1
  15. java程序怎么混淆,使用混淆器,保护你的java程序,混淆java
  16. video.js插件的使用
  17. 服务器系统2003出入站,独立服务器win2003系统站点常见问题解答
  18. python 基于PHP在线音乐网站
  19. 保研之路——北大工学院生物医学工程系夏令营
  20. 实时守护重要物件,异常情况及时推送,VOC智能保管箱G300上手

热门文章

  1. linux的简介及安装centos-64位具体步骤
  2. windows的cmd命令、批处理及批量修改
  3. 使用 jquery 制作简单QQ 聊天窗口 制作课工厂简单窗口---------2017-7-1 16:08
  4. 背景图片蒙版和头像圆形效果
  5. 服务器系统eos升级,佳能EOS R固件更新,自动对焦功能升级
  6. 抖音游戏发行人项目,靠量去堆砌也能月入三千
  7. vue过渡动画Animate.css动画库(1)
  8. 思考问题的本质--如何走出思维困境
  9. 计算机网络(一)概述
  10. js 绑定事件的几种方法 addEventListener()