文章目录

  • 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的介绍与搭建相关推荐

  1. Spring Cloud【Finchley】-02服务发现与服务注册Eureka + Eureka Server的搭建

    文章目录 服务发现组件概述 Eureka概述 Eureka原理 Maven父子工程的搭建 Eureka Server的搭建 新建 Maven Module 添加spring-cloud-starter ...

  2. Linux搭建eureka集群,基于dns搭建eureka集群

    eureka集群方案: 1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影 ...

  3. Eureka基础之EurekaServer单机版搭建

    Eureka基础之EurekaServer单机版搭建 前言 EurekaServer搭建 前言 Eureka是Netflix公司的技术框架,现在已经被Spring Cloud封装了. 使用Eureka ...

  4. 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍

    微服务的注册中心 author:QYX 注册中心可以说是微服务架构中的通讯录,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其他服务时, 就会在这里找到服务的地址, ...

  5. 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群

    笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群 笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装 ...

  6. MySQL读写分离介绍及搭建

    MySQL读写分离介绍及搭建 转载于:https://www.cnblogs.com/gotodsp/p/6511297.html

  7. k8s部署tomcat及web应用_k8s介绍 k8s搭建一个应用(mysql+tomcat)

    k8s介绍 k8s搭建一个应用(mysql+tomcat) kubetnetes介绍 官网 https://kubernetes.io/ Kubernetes也就是k8s Kubernetes是一个开 ...

  8. SSM框架的介绍与搭建

    SSM框架的介绍与搭建 一.简要介绍 二.SSM的搭建 三.简单的web项目测试 一.简要介绍 1. Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...

  9. PKI介绍及搭建Linux私有CA (SSL 示例)

    PKI介绍及搭建Linux私有CA PKI 介绍 PKI 概念 CA 构建私有CA 步骤1:生成私钥 步骤2:生成自签证书 步骤3:为CA提供所需的目录及文件 请求证书 步骤1:查看httpd服务是否 ...

  10. Spring框架的介绍以及搭建

    Spring框架的介绍以及搭建 1.框架和架构 1.1.什么是框架 1.2 架构的发展历程 2.Spring 2.1.Spring框架的优势 3.IOC 3.1.什么是IOC 4.Maven 4.搭建 ...

最新文章

  1. AI开源评测基准AI-Rank,为开源建立标准
  2. 三星 android recovery,三星recovery模式怎么操作
  3. 网络协议档案之ICMP、Ping、Traceroute
  4. 聊一聊,用户画像的前世今生
  5. mysql数据库生成json_Python3实现 将MySQL数据库中的记录生成JSON数据
  6. 自己的JS 监听器。用于选择文字
  7. 程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
  8. 2014年5月生日会
  9. 笔记本通过网口控制单片机_国产又推出笔记本:旋转屏,自带RS-232串口和网口,工程师专用...
  10. 基于微信小程序电影购选系统
  11. 全网最详细ENSP安装教程,零基础网工小白必看!
  12. Mybatis源码阅读之一——工厂模式与SqlSessionFactory
  13. 微信H5 分享(自定义标题、图片、链接) 与 禁止分享(微信隐藏功能按钮) 功能的写法
  14. Matlab如何多行添加注释和取消注释
  15. Java 电阻计算器(一)
  16. Android APP打开另一个APP完整逻辑实现
  17. 关闭WINDOWS文件保护功能
  18. VC中用代码移动CDockPane的位置
  19. 如何修改CAD制图时光标尺寸大小?
  20. PS-第三天-钢笔抠图及商业案例

热门文章

  1. Java工程师面试有哪些要求?
  2. 获得一个不错的电子书翻页效果,和大家分享
  3. 图解:什么是关键路径?
  4. PHP上传excel,处理表格数据,并利用ajax提交保存数据
  5. 美国创业者如何找到市场空白
  6. 金奖方案 | 一专多能、傲视寰宇,南大通用GBase8c数据库牛在哪里?
  7. C++ 排序函数 sort(),qsort()的用法
  8. R语言绘制IPCC风格箱线抖动点图
  9. Eclipse的egit插件冲突合并方法(转)
  10. [深度学习]动手学深度学习笔记-3