Spring Cloud Eureka 简介

注册发现中心 Eureka 来源于古希腊词汇,意为“发现了”。在软件领域, Eureka 是 Netflix 在线影片 公司开源的一个服务注册与发现的组件,和其他 Netflix 公司的服务组件(例如负载均衡、 熔断器、网关等) 一起,被 Spring Cloud 社区整合为 Spring Cloud Netflix 模块。 Eureka 是 Netflix 贡献给 Spring Cloud 的一个框架!

Spring Cloud Eureka 和 Zookeeper 的区别

什么是 CAP 原则(面试)

CAP 原则又称 CAP 定理,指的是在一个分布式系统中,

  • 一致性(Consistency)

  • 可用性(Availability)

  • 分区容错性(Partition tolerance)(这个特性是不可避免的)

CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

Zookeeper 注重数据的一致性,CP zk (注册中心,配置文件中心,协调中心)

Eureka 注重服务的可用性 AP eureka (注册中心)

Eureka项目搭建

springboot版本号:2.3.12.RELEASE

springcloud版本号:Hoxton.SR12

这个自行选择,但一定要相对应

服务端搭建

  • 在模块中创建springboot项目,因为版本更新快,可先选择一个,然后再生成的pom文件中改版本号

    只选择一个Eureake Server即可

    然后再pom文件中改变SpringBoot和springCould的版本号

  • 修改配置文件

    server:
    	port: 8761  #默认端口 例如redis:6379,tomcat:8080,MySQL:3306
    
    spring: 
    	application: 
    		name: eureka-server		#应用名称,一般就写服务名字,不要使用特殊字符
    

    ​ 可以在启动类上更改名字,和启动的应用名称做修改

  • @EnableEurekaServer //开启eureka

  • 如果启动报错可以配置yml文件

    eureka: 
      client:
        fetch-registry: false  #不检索自己
    

客户端搭建

  • 创建springboot项目,选择Eureka Discovery Client依赖和Spring Web,然后版本号一会儿再改

  • 修改pom文件中springBoot和SpringCloud版本号

  • 修改配置文件

    server:
    	port: 8080  #客户端的端口没有要求
    
    spring: 
    	application: 
    		name: eureka-client-a		#应用名称,一般就写服务名字
    
    eureka: 
    	client: 
    		service-url: #指定注册的地址
    			defaultZone: http://localhost:8761/eureka
    

    ​ 可以在启动类上更改名字,和启动的应用名称做修改

  • @EnableEurekaClient //在启动类上开启eureka

客户端可以多创建一个

如何要创建一个客户端集群

  • 选个运行的配置文件,上面的copy

  • 更改Name,在configuration中的Program arguments:中更改端口号

    –server.port=8083

  • 然后直接运行

服务端配置文件

server:
	port: 8761  #默认端口 例如redis:6379,tomcat:8080,MySQL:3306

spring: 
	application: 
		name: eureka-server		#应用名称,一般就写服务名字
eureka: #eureka的配置分为三类,server client instance
	server: 
		eviction-interval-timer-in-ms: 10000 #服务端间隔多少毫秒做定期删除的操作
		renewal-percent-threshold: 0.85 #续约百分比,超过85%的应用没有续约时,囊二eureka会保护服务,不会删除任意一个服务
	instance: # 实例的配置
		instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}  #主机名称:应用名称:端口号
		hostname: localhost  #主机名称或者服务的id
		perfer-ip-address: true  #以ip的形式显示具体的服务信息
		lease-renewal-interval-in-seconds: 5  #服务实例的续约的时间间隔

客服端配置文件

server:
	port: 8080  #客户端的端口没有要求

spring: 
	application: 
		name: eureka-client-a		#应用名称,一般就写服务名字

eureka: 
	client: 
		service-url: #指定注册的地址
			defaultZone: http://localhost:8761/eurake/
		register-with-eureka: true  #可以不往eureka注册
		fetch-registry: true  #应用是否取拉取服务列表到本地
		registry-fetch-interval-seconds: 10  #w为了缓解服务列表的脏读问题,拉取服务列表的时间间隔
	instance: 
		hostname: localhost  #应用的主机名称  (写主机IP)
		instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}  #主机名称:应用名称:端口号
		prefer-ip-address: true  #以ip的形式显示具体的服务信息
		lease-renewal-interval-in-seconds: 10  #服务实例的续约的时间间隔

注意:yml文件中不能存在tab键,包括尾行,一定要用两个空格缩进

配置eureka-server到服务器上

  • 在服务器上新建文件夹/root/wh2106/eureka-server/

  • 在本地创建jar包,Dockerfile,run.sh并上传到目录

    Dockerfile

    FROM openjdk:8
    ENV workdir=/root/wh2106/eureka-server
    COPY . ${workdir}
    WORKDIR ${workdir}
    EXPOSE 8761
    CMD ["java","-jar","eureka-server-1.0.jar"]
    
    

    run.sh

    cd .. && docker build ./eureka-server -t eureka-server:1.0
    
  • 在改路径下给jar包和run.sh赋权

    chmod 777 eureka-server-1.0.jar
    
    chmod 777 run.sh
    
  • 执行run.sh

    ./run.sh
    
  • 开启镜像

    docker run --name eureka-server -p 8761:8761 -e REGISTER_WITH_EUREKA=false -d eureka-server:1.0
    

    这时候可以在本地运行一下测试

    #注意换成自己的docker id  在docker ps -a 中查看
    #进入容器
    docker exec -it 9372df2e5f57 bash
    #在容器内访问
    curl localhost:8761
    

    如果返回html页面代码

    尝试在外网试试IP地址:8761

    如果不行就在安全组开放端口号(阿里云/腾讯云)

文章作者: 郭远
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 郭远的博客空间
SpringCloud SpringCloud
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝