Eureka-Eureka的介绍与搭建
文章目录
- 1:Eureka介绍
- 1:Eureka是什么
- 2:EUREKA中的几个概念
- 服务治理
- 服务注册
- 服务发现
- 2:Eureka搭建
- 1:创建cloud-eureka(springboot)项目
- 2:引入依赖eureka-server
- 3:配置application.yml
- 4:主启动添加@EnableEurekaServer启动服务
- 5:启动服务,访问eureka注册中心
- 3:Eureka服务提供者
- 1:创建项目: springcloud-common1
- 2:添加pom依赖
- 3:配置applicaton.yml
- 4:主启动类添加@EnableEurekaClient注解
- 4:Eureka服务消费者
- 1:创建项目: springcloud-comsumer
- 2:添加pom依赖
- 3:配置applicaton.yml
- 4:主启动类添加@EnableEurekaClient注解
- 5配置restTemplate
- 6:使用resttemplate通过服务名调用
- 5:Eureka集群
- 1:修改 hosts 文件
- 2:创建三个项目,引入依赖和上边相同
- 3:配置application.yml
- 4:Eureka 服务端注解 @EnableEurekaServer
- 5:集群最多三台
- 6:Eureka自我保护机制
1:Eureka介绍
1:Eureka是什么
Eureka是一个基于REST (Representational State Transfer)的服务,主要用于AWS云中的服务定位,以实现中间层服务器的负载平衡和故障转移。也就是说Eureka在微服务中是一个服务发现注册的组件
EurekaServer:就是服务注册中心(可以是一个集群),对外暴露自己的地址
提供者:服务的提供者,向EurekaServer注册自己的信息,也叫EurekaClient
消费者:服务的消费者
EurekaServer是一个注册中心,服务的提供者需要向EurekaServer注册,并且定时的发送心跳以确保EurekaServer注册中心指导这个服务是active的,而EurekaServer注册中心则向消费者提供服务提供者的ip和端口号,以便消费者调用
2:EUREKA中的几个概念
服务治理
用来实现各个微服务实例化的自动化注册与发现。
服务注册
首先会构建一个服务中心,之后的每个服务单元向这个服务中心提供主机,端口号等信息登记自己提供的服务。
而注册中心通过服务名分类组织服务清单,并对其进行维护。
服务注册中心需要以心跳的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除。
服务发现
服务之间不需要指定具体的实例地址,而是通过服务中心发起请求调用实现。所以,调用方并不需要知道服务提供方具体的位置,只需向注册中心发起请求,从而获取所有服务的实例清单,才能实现对具体服务实例的访问。
实际应用中,不会每次都向注册中心获取服务,使用了缓存和服务剔除等不同的策略。
2:Eureka搭建
1:创建cloud-eureka(springboot)项目
2:引入依赖eureka-server
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
3:配置application.yml
# 服务启动端口号
server:port: 7000
eureka:instance:hostname: euk-server-two.com # 服务注册中心ip地址,在hosts文件配置# 可作为参数传递,使用http://euk-server-two.com:7000/eureka/可展示具体信息metadataMap:message: xiaohong serverclient:# 是否将自己注册到Eureka Server,默认是true,如果当前就一个Server,那就设置成false,# 表明该服务不会向Eureka Server注册自己的信息# 但如果当前有多个Server,那就设置成true,# 表明该服务不会向其他Eureka Server注册自己的信息registerWithEureka: true# 是否从Eureka Server获取注册信息,如果当前就一个Server,不需要同步其他节点的数据,设置false# 如果当前有多个Server,设置truefetchRegistry: true# 设置服务注册中心的URL,用于client和server端交流serviceUrl:defaultZone: http://euk-server-one.com:7001/eureka/# 关闭自我保护模式server:enableSelfPreservation: false
# 设置Server的名称
spring:application:name: Eureka-Server
4:主启动添加@EnableEurekaServer启动服务
package com.mashibing.cloudeureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaApplication {public static void main(String[] args) {SpringApplication.run(CloudEurekaApplication.class, args);}}
5:启动服务,访问eureka注册中心
3:Eureka服务提供者
1:创建项目: springcloud-common1
2:添加pom依赖
<!-- eureka客户端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.1.release</version></dependency>
3:配置applicaton.yml
eureka:client:# 注册信息到Eureka服务端serviceUrl:# 使用英文逗号,注册到多个Eureka服务端defaultZone: http://${eureka.instance.hostname}:7000/eureka/,http://euk-server-one.com:7001/eureka/registerWithEureka: truefetchRegistry: true# Eureka服务端的域名信息instance:hostname: euk-server-two.com
# 服务启动端口号
server:port: 7100
# 设置被Server发现后,当前Client的名称
spring:application:name: USER-PROVIDER
4:主启动类添加@EnableEurekaClient注解
package com.online.taxi.order;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.scheduling.annotation.EnableAsync;/*** @author yueyi2019*/
@EnableEurekaClient
@SpringBootApplication
public class ServiceOrderApplication {public static void main(String[] args) {SpringApplication.run(ServiceOrderApplication.class, args);}}
4:Eureka服务消费者
1:创建项目: springcloud-comsumer
2:添加pom依赖
<!-- eureka客户端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.1.release</version></dependency>
3:配置applicaton.yml
eureka:client:# 注册信息到Eureka服务端serviceUrl:# 使用英文逗号,注册到多个Eureka服务端defaultZone: http://${eureka.instance.hostname}:7000/eureka/,http://euk-server-one.com:7001/eureka/registerWithEureka: truefetchRegistry: true# Eureka服务端的域名信息instance:hostname: euk-server-two.com
# 服务启动端口号
server:port: 7100
# 设置被Server发现后,当前Client的名称
spring:application:name: USER-PROVIDER
4:主启动类添加@EnableEurekaClient注解
package com.online.taxi.order;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.scheduling.annotation.EnableAsync;/*** @author yueyi2019*/
@EnableEurekaClient
@SpringBootApplication
public class ServiceOrderApplication {public static void main(String[] args) {SpringApplication.run(ServiceOrderApplication.class, args);}}
5配置restTemplate
在resttemplate上添加@LoadBalanced。使用服务名调用
package com.zy.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
@LoadBalancerClient(value="SPRINGCLOUD-COMMON")
public class RestTemplateConfiguration {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}
6:使用resttemplate通过服务名调用
package com.zy.controller;import java.util.Map;import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
@RequestMapping("/consumer")
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;private static String port = null;@RequestMapping("/get")public Object get(@RequestBody Map<String, Object> parm) {ResponseEntity<Map> postForEntity = restTemplate.postForEntity("http://SPRINGCLOUD-COMMON/com/get", parm,Map.class);Map<String, Object> body = postForEntity.getBody();System.out.println(body);String rstPort = MapUtils.getString(body, "port");if (StringUtils.equals(port, rstPort)) {System.err.println("相同:" + port + " ,rstPort:" + rstPort);}port = rstPort;return body;}}
5:Eureka集群
1:修改 hosts 文件
由于只能在一台机器模拟三台服务器,此时必须要在主机的 hosts 文件中修改主机名,否则都默认为 localhost,则无法区分各个 Eureka 服务注册中心的实例。
windows 目录:C:\Windows\System32\drivers\etc\hosts,在末尾处添加如下映射配置。(修改主机名 hostname)
127.0.0.1 eureka1
127.0.0.1 eureka2
127.0.0.1 eureka3
2:创建三个项目,引入依赖和上边相同
3:配置application.yml
server: port: 8761eureka: instance:hostname: eureka8761 # eureka 服务端的实例名称client: register-with-eureka: false # false 表示不向本端注册中心注册自己。fetch-registry: false # false 表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务service-url: # Eureka 实例之间互相注册,即把自己注册到另外两个服务注册中心实例中defaultZone: http://eureka8762:8762/eureka/,http://eureka8763:8763/eureka/,http://eureka8763:8763/eureka/
注;如果是三台集群的话,defaultZone一定要都配上三台地址,这个就不解释了,debug源码能看出来
4:Eureka 服务端注解 @EnableEurekaServer
5:集群最多三台
通过源码追踪,发现集群最多三台,因为源码里在检测eurake服务时,也是循环了三次,如果想要配置第四台,需要修改源码;源码我忘了在哪里了,懒得找了;
通过查看源码得到,客户端在拉取eureka服务时,总是按照defaultZone配置的顺序使用,所以为了提高效率,建议不同的客户端在配置defaultZone时,打乱顺序;
6:Eureka自我保护机制
Eureka在CAP理论当中是属于AP , 也就说当产生网络分区时,Eureka保证系统的可用性,但不保证系统里面数据的一致性
默认开启,服务器端容错的一种方式,即短时间心跳不到达仍不剔除服务列表里的节点
默认情况下,Eureka Server在一定时间内,没有接收到某个微服务心跳,会将某个微服务注销(90S)。但是当网络故障时,微服务与Server之间无法正常通信,上述行为就非常危险,因为微服务正常,不应该注销。
Eureka Server通过自我保护模式来解决整个问题,当Server在短时间内丢失过多客户端时,那么Server会进入自我保护模式,会保护注册表中的微服务不被注销掉。当网络故障恢复后,退出自我保护模式。
思想:宁可保留健康的和不健康的,也不盲目注销任何健康的服务。
自我保护触发条件
默认情况下,客户端每分钟续约数量小于客户端总数的85%时会触发保护机制
eureka:server:# 自我保护看自己情况enable-self-preservation: true# 续约阈值,和自我保护相关renewal-percent-threshold: 0.85# server剔除过期服务的时间间隔eviction-interval-timer-in-ms: 1000# 是否开启readOnly读缓存use-read-only-response-cache: true# 关闭 readOnlyresponse-cache-update-interval-ms: 1000
Eureka-Eureka的介绍与搭建相关推荐
- Spring Cloud【Finchley】-02服务发现与服务注册Eureka + Eureka Server的搭建
文章目录 服务发现组件概述 Eureka概述 Eureka原理 Maven父子工程的搭建 Eureka Server的搭建 新建 Maven Module 添加spring-cloud-starter ...
- Linux搭建eureka集群,基于dns搭建eureka集群
eureka集群方案: 1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影 ...
- Eureka基础之EurekaServer单机版搭建
Eureka基础之EurekaServer单机版搭建 前言 EurekaServer搭建 前言 Eureka是Netflix公司的技术框架,现在已经被Spring Cloud封装了. 使用Eureka ...
- 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍
微服务的注册中心 author:QYX 注册中心可以说是微服务架构中的通讯录,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其他服务时, 就会在这里找到服务的地址, ...
- 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群
笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群 笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装 ...
- MySQL读写分离介绍及搭建
MySQL读写分离介绍及搭建 转载于:https://www.cnblogs.com/gotodsp/p/6511297.html
- k8s部署tomcat及web应用_k8s介绍 k8s搭建一个应用(mysql+tomcat)
k8s介绍 k8s搭建一个应用(mysql+tomcat) kubetnetes介绍 官网 https://kubernetes.io/ Kubernetes也就是k8s Kubernetes是一个开 ...
- SSM框架的介绍与搭建
SSM框架的介绍与搭建 一.简要介绍 二.SSM的搭建 三.简单的web项目测试 一.简要介绍 1. Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...
- PKI介绍及搭建Linux私有CA (SSL 示例)
PKI介绍及搭建Linux私有CA PKI 介绍 PKI 概念 CA 构建私有CA 步骤1:生成私钥 步骤2:生成自签证书 步骤3:为CA提供所需的目录及文件 请求证书 步骤1:查看httpd服务是否 ...
- Spring框架的介绍以及搭建
Spring框架的介绍以及搭建 1.框架和架构 1.1.什么是框架 1.2 架构的发展历程 2.Spring 2.1.Spring框架的优势 3.IOC 3.1.什么是IOC 4.Maven 4.搭建 ...
最新文章
- AI开源评测基准AI-Rank,为开源建立标准
- 三星 android recovery,三星recovery模式怎么操作
- 网络协议档案之ICMP、Ping、Traceroute
- 聊一聊,用户画像的前世今生
- mysql数据库生成json_Python3实现 将MySQL数据库中的记录生成JSON数据
- 自己的JS 监听器。用于选择文字
- 程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
- 2014年5月生日会
- 笔记本通过网口控制单片机_国产又推出笔记本:旋转屏,自带RS-232串口和网口,工程师专用...
- 基于微信小程序电影购选系统
- 全网最详细ENSP安装教程,零基础网工小白必看!
- Mybatis源码阅读之一——工厂模式与SqlSessionFactory
- 微信H5 分享(自定义标题、图片、链接) 与 禁止分享(微信隐藏功能按钮) 功能的写法
- Matlab如何多行添加注释和取消注释
- Java 电阻计算器(一)
- Android APP打开另一个APP完整逻辑实现
- 关闭WINDOWS文件保护功能
- VC中用代码移动CDockPane的位置
- 如何修改CAD制图时光标尺寸大小?
- PS-第三天-钢笔抠图及商业案例