SpringCloud学习笔记-Eureka服务治理

首先为自己打个广告,我目前在某互联网公司做架构师,已经有5年经验,每天都会写架构师系列的文章,感兴趣的朋友可以关注我和我一起探讨,关注我,免费分享Java基础教程,以及进阶的高级Java架构师教程,全部免费送

 

关系调用:

服务生产者启动时,向服务注册中心注册自己提供的服务。

服务消费者启动时,向服务注册中心订阅自己需要的服务。

注册中心会返回服务提供者的地址信息给消费者。

消费者则从服务提供者调用服务。

SpringCloud学习笔记-Eureka服务治理_第1张图片

 

使用Eureka进行服务治理:

首先搭建注册中心,为了以后项目能在此基础上继续开发,所以选择了基于maven建立模块化。

建立父项目POM

SpringCloud学习笔记-Eureka服务治理_第2张图片

 

这是基本的架子,后续可增加配置中心以及其他的服务。

先看一下父pom文件中的配置,项目搭建可参考:



    4.0.0
    com.zhaixingzu
    yyc
    1.1.0-SNAPSHOT
    pom
    yyc
    yyc-pom
    
        yyc-registry
    
    
    
        2.1.3.RELEASE
        Greenwich.RELEASE
    
    
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

下来建立yyc-registry

SpringCloud学习笔记-Eureka服务治理_第3张图片

 

在yyc-registry中添加pom的配置信息:



    4.0.0
    
        com.zhaixingzu
        yyc
        1.1.0-SNAPSHOT
    
    yyc-register
    jar
    yyc-register
    yyc 注册中心
    
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
        
        
            org.springframework.cloud
            spring-cloud-starter-security
        
        
        
            org.springframework.boot
            spring-boot-starter-web
            
                
                
                    spring-boot-starter-tomcat
                    org.springframework.boot
                
            
        
        
        
            org.springframework.boot
            spring-boot-starter-undertow
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

 

在RegistryApplication中我们添加注解

package com.zhaixingzu.yyc.registry;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
 * 服务注册中心
 * @author Herbert
 * @date 2019年06月19日
 */
@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
    public static void main(String[] args) {
        SpringApplication.run(RegistryApplication.class, args);
    }
}

 

在application.properties中添加配置信息:

server.port=9900
spring.application.name=yyc-registry
spring.security.user.name=admin
spring.security.user.password=admin
spring.application.admin.enabled=false
eureka.instance.hostname=127.0.0.1
eureka.instance.prefer-ip-address=true
#是否开启自我保护(运行期间spring会统计信条失败的比例在15分钟之内是否低于85%,如果不低于85%,Eureka会将实例注册信息保护起来,让这些实例不会过期)
eureka.server.enable-self-preservation= false
#3秒钟自动剔除失效的节点,清理无效的节点
eureka.server.eviction-interval-timer-in-ms= 3000
#eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上
eureka.server.response-cache-update-interval-ms= 3000
#eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
#由于启用了evict其实就用不太上改这个配置了
#默认180s
eureka.server.response-cache-auto-expiration-in-seconds=180
#不要向注册中心注册自己
eureka.client.register-with-eureka=false
#禁止检索服务 设置为true可以从其他eureka节点获取注册信息
eureka.client.fetch-registry=false
#设置与eureka交互的地址
eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/

到此所有的配置已经完成,直接启动启动类:

SpringCloud学习笔记-Eureka服务治理_第4张图片

 

访问页面:

SpringCloud学习笔记-Eureka服务治理_第5张图片

 

输入账号,密码:

SpringCloud学习笔记-Eureka服务治理_第6张图片

 

注:从上图看到,在"Instances currently registered with Eureka"信息中,没有一个实例,说明目前还没有服务注册。

注册中心启动完成

下来记录其中重点笔记:

SpringCloud学习笔记-Eureka服务治理_第7张图片

 

 

 

 

1:在父级项目yyc中定义的maven包为pom,引用了一些SpringCloud项目常用的一些依赖包,这样在每一个子项目中就不会再去依赖

2:子项目yyc-registry中排除了springboot用tomcat作为内嵌容器,引进了undertow容器,tomcat和undertow的负载能力基本差不多。引进的原因是因为undertow为轻量级容器,比Jeety性能稍优

3:@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan

4:application.properties 和 application.yml 中对配置没有任何区别,yml的配置文件可增强可读性,在书写方面也比较方便

5:如需要开启密码认证,需要进行安全配置:

引人Jar包

SpringCloud学习笔记-Eureka服务治理_第8张图片

 

并且在application中进行配置用户名与密码:

SpringCloud学习笔记-Eureka服务治理_第9张图片

 

设置与eureka的交互地址:

eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/

 

6:配置信息详解:

server:
  port: 9900
spring:
  application:
    name: yyc-registry
  security:
    user:
      name: admin
      password: admin
  cloud:
    config:
      enabled: false
eureka:
  instance:
    hostname: 127.0.0.1
    prefer-ip-address: true
  server:
    #是否开启自我保护(运行期间spring会统计信条失败的比例在15分钟之内是否低于85%,如果不低于85%,Eureka会将实例注册信息保护起来,让这些实例不会过期)
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 3000      #3秒钟自动剔除失效的节点,清理无效的节点
    response-cache-update-interval-ms: 3000  #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上
    response-cache-auto-expiration-in-seconds: 180
    #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
    #由于启用了evict其实就用不太上改这个配置了
    #默认180s
  client:
    register-with-eureka: false #不要向注册中心注册自己
    fetch-registry: false #禁止检索服务 设置为true可以从其他eureka节点获取注册信息
    service-url:
      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/  #设置与eureka交互的地址

 

7: 对于配置application.yml 和 bootstrap.yml 的区别:

  • Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application,
  • application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
  • bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。
  • bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。
  • 这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。
  • bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
  • boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
  • boostrap 里面的属性不能被覆盖

8:Eureka中启动成功后显示红色标记(如下图)

SpringCloud学习笔记-Eureka服务治理_第10张图片

 

系统在三种情况下会出现红色加粗的字体提示:

a.在配置上,自我保护机制关闭

RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

b.自我保护机制开启了

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE

NOT BEING EXPIRED JUST TO BE SAFE.

c.在配置上,自我保护机制关闭了,但是一分钟内的续约数没有达到85% , 可能发生了网络分区,会有如下提示

THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

9:在启动加入banner.txt可以出现banner自定义样式

SpringCloud学习笔记-Eureka服务治理_第11张图片

 

 

 

 

关注我,免费分享Java基础教程,以及进阶的高级Java架构师教程,全部免费送

 

 

 

 

 

 

 

推荐阅读:

Spring Cloud Alibba教程:Sentinel的使用

Spring Cloud微服务如何设计异常处理机制?

苏宁Spring Cloud微服务脚手架工具vole实践分享

 

原文阅读:

https://zhuanlan.zhihu.com/p/69911648

你可能感兴趣的:(架构资料)