SpringCloud Eureka基本使用
1. 简介
Eureka是Netflix开发的服务发现框架,并被Spring cloud 收录 并封装成为其服务治理的模块实现
Eureka采用了CS的架构设计,分为 Server端 和 Client端,
Eureka Server: 提供服务注册服务,各个微服务节点通过配置启动后,会在 Server中进行注册,这样Server中的服务注册列表将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到
Eureka Client :通过注册中心进行访问, 分为消费方 和 提供方,提供方启动服务, 会注册进 Server中 并发送心跳,(默认周期为30秒),如果Server在多个心跳周期内(默认三个:90s)没有收到该节点的心跳,会将该服务节点中列表中移除, 消费方请求Server端 获取需要的服务节点信息地址等信息,并进行调用
示意图:

2. 单机Eureka Server构建
父工程依赖 控制springcloud 系列的版本
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
eureka-server pom依赖
<dependencies>
<!-- Eureka server 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- boot web actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
yml配置文件:
server:
port: 7001
spring:
application:
name: cloud-eureka-service
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己
fetch-registry: false #false表示自己端就是注册中心
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
主启动配置文件: 使用EnableEurekaServer 注解开启服务自动配置
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class,args);
}
}
浏览器访问:http://127.0.0.1:7001/

至此一个最基本的Eureka server就搭建完成
3. Eureka Client 端服务提供方搭建
pom依赖 Eureka client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- boot web actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
yml配置
server:
port: 8001
spring:
application:
name: cloud-payment-service #集群部署按照这个名字区分
eureka:
client:
register-with-eureka: true #是否将自己注册到注册中心
fetch-registry: true #是否从服务端抓取已有的注册信息
service-url:
defaultZone: http://localhost:7001/eureka # eureka 服务地址
instance:
instance-id: payment8001 # 修改eureka 管理页面中的 服务 Status 中的服务名
prefer-ip-address: true #访问路径可以显示IP地址
编写controller 提供服务
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/get/{id}")
public String getPaymentById(@PathVariable("id") Long id) {
return "接受的参数为:"+id+"端口为:"+serverPort
}
}
主启动类
@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class,args);
}
}
查看 eureka 监控页面 发现注册服务列表已经有服务注册
图中红色的字是自我保护机制的提示信息 后面讲

4. Eureka Client 端服务消费方搭建
pom依赖和 提供方一样,都是eureka client
yml配置
server:
port: 80
spring:
application:
name: cloud-consummer-service
eureka:
client:
register-with-eureka: true #是否将自己注册到注册中心
fetch-registry: true #是否从服务端抓取已有的注册信息
service-url:
defaultZone: http://localhost:7001/eureka #eureka server地址
使用@LoadBalanced 注解构建 RestTemplate,用来获取服务 并调用
加强 RestTemplate ,client 默认使用 Ribbon 技术进行远程调用,后面详说
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate initRestTemplate(){
return new RestTemplate();
}
}
编写controller 调用 服务
@RestController
@Slf4j
public class OrderController {
//host 为服务名
public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/get/{id}")
public String get(@PathVariable("id") Long id){
return restTemplate.getForObject(PAYMENT_URL+"/get/create/"+id,String.class);
}
}
主启动类
@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}
查看监控页面 发现服务消费方也注册了进来

调用消费方接口:http://localhost/consumer/get/80
成功调用服务提供方接口 返回信息:接受的参数为:80端口为:8001
实际生产环境中,为了保证高可用,服务注册中心和 服务提供方都会部署集群,下面进行集群部署
5. Eureka Server 集群
将刚刚的 单机 服务项目拷贝一份 并进行修改
修改 yml
互相指定对方服务的地址,相互注册 相互守望
server:
port: 7002
spring:
application:
name: cloud-eureka-service
eureka:
instance:
hostname: localhost7002 #eureka服务端的实例名称
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost7001:7001/eureka/ #必须使用hostname集群
填写的地址必须是 对方地址的hostname,可以配置etc/hosts文件,
并且将 register-with-eureka 和 fetch-registry 置为true 才可以相互注册
启动两个服务

发现两个 服务已经互相注册成功 并显示在 集群节点上
6. 服务提供方搭建集群并注册到集群注册中心
同样将之前搭建的 服务提供方 拷贝一份,并修改yaml
修改端口 为8002
spring.application.name 的名称保持一致
server:
port: 8002
spring:
application:
name: cloud-payment-service #集群部署按照这个名字区分
eureka:
client:
register-with-eureka: true #是否将自己注册到注册中心
fetch-registry: true #是否从服务端抓取已有的注册信息
service-url:
defaultZone: http://127.0.0.1:7001/eureka,http://127.0.0.1:7002/eureka
instance:
instance-id: payment8002 # 修改eureka 管理页面中的 服务 Status 中的服务名
prefer-ip-address: true #访问路径可以显示IP地址
启动 两个服务提供方,查看注册中心 发现都已经注册成功

修改服务消费 方配置,指定注册中心集群,多个url使用,分割
defaultZone: http://127.0.0.1:7001/eureka,http://127.0.0.1:7002/eureka
多次调用接口,发现已经轮询调用 连个服务提供方
接受的参数为:80端口为:8001
接受的参数为:80端口为:8002
7. 常用参数
1. eureka.client.register-with-eureka=true(默认)
该项配置说明,是否向注册中心注册自己,在非集群环境下Server端设为为false,表示自己不注册自己
2. eureka.client.fetch-registry=true(默认)
该项配置说明,注册中心只要维护微服务实例清单,不需要作检索服务,在非集群环境下Server端设为为false
3. eureka.instance.lease-renewal-interval-in-seconds=30(默认)
该配置说明,服务提供者会维持一个心跳告诉eureka server 自己的健康,这个就是一个心跳周期
4. eureka.instance.lease-expiration-duration-in-seconds=90(默认)
该配置说明,从最后一次续约时间开始,记时90s 如果还没接受到客户端的心跳则剔除
5. eureka.client.registry-fetch-interval-seconds=30
缓存在调用方的微服务实例清单刷新时间(前提:eureka.client.fetch-registry为true,检索服务列表)
SpringCloud Eureka基本使用的更多相关文章
- springcloud(第三篇)springcloud eureka 服务注册与发现 *****
http://blog.csdn.net/liaokailin/article/details/51314001 ******************************************* ...
- SpringCloud Eureka 报错 无法启动问题
1.SpringCloud Eureka 报错 无法启动基本上都是spring boot的版本与spring cloud的版本不匹配导致的. <dependencyManagement> ...
- spring-cloud: eureka之:ribbon负载均衡自定义配置(二)
spring-cloud: eureka之:ribbon负载均衡自定义配置(二) 有默认配置的话基本上就是轮询接口,现在我们改用自定义配置,同时支持:轮询,随机接口读取 准备工作: 1.eureka服 ...
- spring-cloud: eureka之:ribbon负载均衡配置(一)
spring-cloud: eureka之:ribbon负载均衡配置(一) 比如我有: 一个eureka服务:8761 两个user用户服务: 7900/7901端口 一个movie服务:8010 1 ...
- springcloud+eureka简单入门案例
springcloud+eureka简单入门案例 一.服务提供者 直接提供服务,入门案例没有特别要设置的地方,注意下端口,由于要启动多个服务,可能会冲突 配置文件(src/main/resources ...
- 微服务之SpringCloud实战(二):SpringCloud Eureka服务治理
服务治理 SpringCloud Eureka是SpringCloud Netflix微服务套件的一部分,它基于Netflix Eureka做了二次封装,主要完成微服务的服务治理功能,SpringCl ...
- SpringCloud Eureka参数配置项详解
SpringCloud Eureka参数配置项详解(转) Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下 ...
- [转帖]springboot+k8s+抛弃springcloud.eureka
springboot+k8s+抛弃springcloud.eureka https://www.cnblogs.com/lori/p/12048743.html springboot开发微服务框架一般 ...
- SpringCloud+Eureka+Feign+Ribbon的简化搭建流程,加入熔断,网关和Redis缓存[2]
目录 前提:本篇是基于 SpringCloud+Eureka+Feign+Ribbon的简化搭建流程和CRUD练习[1] 的修改与拓展 1.修改consumer的CenterFeign.java,把返 ...
- springCloud eureka服务治理集群增加安全认证
做为SpringCloud Netflix服务套件中的一部分,springCloud eureka基于Netflix Eureka做了二次封装,默认提供WEB管理页面及服务治理. 为了确保在生产环境中 ...
随机推荐
- # 继续前行github star突破8k即时通讯IM开源项目OpenIM版本发布计划
项目简介 OpenIM继续领跑开源IM领域,在广大开发者的支持下,目前github star突破8k.在数据泄露.信息外泄.隐私滥用的时代,IM私有化部署需求旺盛.其中,政企协同办公对IM需求猛增,随 ...
- arch linux 安装
好长时间都没有更新自己的博客了,我简单翻阅了一下自己的更新记录,上一次更新好像还是在5月份左右,距今也有快半年,这半年也是遇到了很多事情,有不好的,也有好的.这半年我对在日常生活工作中使用Linux系 ...
- 7.5 Windows驱动开发:监控Register注册表回调
在笔者前一篇文章<内核枚举Registry注册表回调>中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监控函数,通 ...
- 字节码编程,Javassist篇五《使用Bytecode指令码生成含有自定义注解的类和方法》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 到本章为止已经写了四篇关于字节码编程的内容,涉及了大部分的API方法.整体来说对 J ...
- 在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)
本文介绍在Visual Studio软件中配置.编译C++环境下GDAL库.SQLite环境与PROJ库的详细方法. GDAL库是一个非常方便的地理数据处理库,但其在C++环境下的配置与编译流 ...
- 【C语言深度解剖】一篇解决程序的环境【编译+链接详解】让面试官给我们竖起大拇指
文章目录 程序的翻译环境 翻译环境详解 编译 预编译 编译 汇编 关于形成符号表 链接 运行环境 尾声 [C语言深度解剖][Linux操作系统]程序的环境[编译+链接详解] 那么这里博主先安利一下一些 ...
- C语言输出百分号%
遭遇的问题 在学习时有一个课后题要求计算两个变量的加减乘除以及取余,其中去余需要输出如下的效果: 10 % 5 = 0; 我就写了这样的代码: printf("a % b = %d" ...
- 从CPU100%高危故障到稳定在10%:一个月的优化之旅,成功上线!
引言 经过三个月的开发,项目通过了所有测试并上线,然而,我们发现项目的首页几乎无法打开,后台一直发生超时错误,导致CPU过度负荷.在这次项目开发过程中,我制定了一份详细的技术优化方案.考虑到客户无法提 ...
- Acwing 800.数组元素的目标和,双指针初步
Acwing 800.数组元素的目标和 给定升序的有序数组A(长度为n),B(长度为m)以及目标值x,求出满足\(A[i] + B[j] = x\)的数对\((i,j)\),题目保证仅有 唯一解 输入 ...
- select * 的使用说明
一. SELECT * 的含义 select * 语句是从指定的表中按照顺序返回所有列. 二. SELECT * 的优缺点 1 优点 在实际开发过程中,大家习惯性地使用select * from ...