SpringCloud之Eureka

1. eureka是什么
Eureka在spring cloud中作为一个服务的注册与发现的关键角色
只是springcloud中的一个组件,就是一个单独的项目作为注册中心
2.创建eureka注册中心
1.创建项目
	..

2.导入依赖
	<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
3.在启动类上添加
	@EnableEurekaServer		//包含@EnableEurekaClient
	
4.配置文件
server:
	port : 8761

	eureka:
		client:
			register-with-eureka: false		#默认为true,会将自身注册到指定的eureka中
			fetch-register: false		#默认为true,会拉取eureka上的信息
			service-url:
				defualtZone: http://localhost:8761/eureka/		#默认eureka的路径
3.创建eureka客户端并注册到注册中心
1.创建项目
	...

2.导入依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
3.在启动类上添加
	//@EnableDiscoveryClient      //如果注册中心不是eureka,使用@EnableDiscoveryClient
	@EnableEurekaClient

4.配置文件
	spring: 
		application: 
			name: client		#改个名
	eureka:
		client:
			service-url:
				defualtZone: http://localhost:8761/eureka/		#默认eureka的路径
4.给eureka注册中心添加监听器
//每当注册中心有任何变化时都会监听到
@Component
public class EurekaListener {

	//服务下线
    @EventListener
    public void canceledEvent(EurekaInstanceCanceledEvent event){
        String appName = event.getAppName();
        System.out.println(appName+"已经下线!!!");
    }

	//服务注册到注册中心
    @EventListener
    public void canceledEvent(EurekaInstanceRegisteredEvent event){
        String appName = event.getInstanceInfo().getAppName();
        System.out.println(appName+"刚刚注册到注册中心!!!");
    }

	//服务续约
    @EventListener
    public void canceledEvent(EurekaInstanceRenewedEvent event){
        String appName = event.getAppName();
        System.out.println(appName+"前来续约!!!");
    }

	//注册中心启动
    @EventListener
    public void canceledEvent(EurekaRegistryAvailableEvent event){
        System.out.println("注册中心启动中!!!");
    }

	//注册中心已经启动
    @EventListener
    public void canceledEvent(EurekaServerStartedEvent event){
        System.out.println("注册中心已经启动!!!");
    }

}

在这里插入图片描述

5.关于eureka客户端心跳和自我保护机制
1.eureka的service的保护机制
	如果当服务在指定时间内,没有发送心跳时,默认eureka会认为由于网络延迟导致,并不会立即清除这个服务.
	在开发环境下,服务下线看不到指定效果.
		-> 关闭自我保护,并设置清空不开服务的间隔时间
	eureka:
		server:
			enable-self-preservation: false 	#开发环境下,可以关闭,生产环境一定要开启
			eviction-interval-timer-in-ms: 5000 	#每隔多久清除一个不可用的服务
			
2.eureka的客户端
	在默认情况下,eureka的客户端默认是每30秒发送一次心跳,90秒没发送就认为宕机.
	手动设置发送心跳的间隔和持续时间.
	eureka:
		instance:
			lease-renewal-interval-in-seconds: 5	#服务发送心跳的时间间隔
			lease-expiration-duration-in-seconds: 10	#多久没发送心跳就挂掉
6.给eureka添加安全机制
进入eureka需要做认证机制

1.在eureka端:
	1.导入依赖
		<dependency>
        	<groupId>org.springframework.boot</groupId>
        	<artifactId>spring-boot-starter-security</artifactId>
    	</dependency>
	2.编写配置文件
		spring.security.user.name=admin
		spring.security.password=admin
	3.编写配置类
		@Configuration
		public class WebSecurityConfig extends WebSecurityConfigureAdapter{
			
			public void configure(HttpSecurity http){
				//1.直接关闭csrf机制
				http.csrf().disable();		//会导致csrf完全失效
				
				//2.忽略某个路径.通过csrf进来
				http.csrf.ignoringMatchers("/eureka/**");		//指定路径放行
			}
		}
2.在eureka的客户端
	1.在注册eureka的路径上添加用户名:密码@路径
		eureka:
		client:
			service-url:
				defualtZone: http://admin:admin@localhost:8761/eureka/
7.eureka的高可用

准备两个yml文件
application-8761.yml:

eureka:
  client:
    register-with-eureka: true   #默认为true,会将自身注册到指定的eureka中
    fetch-registry: true   #默认为true,会拉取eureka上的信息
    service-url:
      defaultZone: http://localhost:8762/eureka/    #默认eureka的路径
  server:
    enable-self-preservation: true    #开发环境下,可以关闭,生产环境一定要开启
    eviction-interval-timer-in-ms: 5000   #每隔多久清除一个不可用的服务
server:
  port: 8761
  
spring:
  application:
    name: eureka

application-8762.yml:

eureka:
  client:
    register-with-eureka: true   #默认为true,会将自身注册到指定的eureka中
    fetch-registry: true   #默认为true,会拉取eureka上的信息
    service-url:
      defaultZone: http://localhost:8761/eureka/    #默认eureka的路径
  server:
    enable-self-preservation: true    #开发环境下,可以关闭,生产环境一定要开启
    eviction-interval-timer-in-ms: 5000   #每隔多久清除一个不可用的服务
server:
  port: 8762
  
spring:
  application:
    name: eureka

克隆两个相同的服务,分别指向不同的配置)
在这里插入图片描述启动两个服务
在这里插入图片描述
在这里插入图片描述
出现如上所述说明集群搭建成功,然后再启动客户端
在这里插入图片描述
把8761的服务关闭,客户端会在经过默认时间之后会关闭,因为这时客户端的ip指向的是8761,所以这里客户的service-url要配置为所有eureka集群的路径

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
8.常用配置解析
# 应用名称,将会显示在Eureka界面的应用名称列
spring.application.name=eureka-server

# 应用端口,Eureka服务端默认为:8761
server.port=8761

# 是否允许开启自我保护模式,缺省:true
# 当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端
eureka.server.enable-self-preservation = false

# Eureka服务器清理无效节点的时间间隔,单位:毫秒,缺省:60000,即60秒
eureka.server.eviction-interval-timer-in-ms = 60000

# 服务名,默认取 spring.application.name 配置值,如果没有则为 unknown
eureka.instance.appname = eureka-client

# 实例ID
eureka.instance.instance-id = eureka-client-instance1

# 应用实例主机名
eureka.instance.hostname = localhost

# 客户端在注册时使用自己的IP而不是主机名,缺省:false
eureka.instance.prefer-ip-address = false

# 应用实例IP
eureka.instance.ip-address = 127.0.0.1

# 服务失效时间,失效的服务将被剔除。单位:秒,默认:90
eureka.instance.lease-expiration-duration-in-seconds = 90

# 服务续约(心跳)频率,单位:秒,缺省30
eureka.instance.lease-renewal-interval-in-seconds = 30

# 是否向注册中心注册自己,缺省:true
# 一般情况下,Eureka服务端是不需要再注册自己的
eureka.client.register-with-eureka = true

# 是否从Eureka获取注册信息,缺省:true
# 一般情况下,Eureka服务端是不需要的
eureka.client.fetch-registry = true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值