Spring Cloud Eureka- 微服务注册与发现

简介

eureka是netflix开源服务发现组件,它本身也是一个机遇REST的服务,包含server端和client端。

  • eureka-server具有服务发现能力,各个微服务启动时,会向eureka-server注册中心中注册自己的服务信息,例如,该节点的IP、端口、微服务名称、以及节点状态信息。
  • eureka-client当微服务启动时,eureka-client会将自己信息注册到eureka-server上面,并且会周期性的向eureka-server发起心跳检测,如果在一定时间内,未收到某一个服务的心跳,eureka-server将会移除掉该服务信息。
  • 默认情况下,eureka-server同时也是eureka-client,服务启动时,也会将自己信息注册到eureka-server里面。可以采用多个eureka-server相互注册方式,来实现服务列表信息同步,即eureka的高可用。
  • 当eureka的服务注册中心未收到eureka-client心跳时,eureka服务注册中心将会移除掉该服务信息,其实eureka-client会缓存服务端的服务列表信息,这个好处就是每次客户端请求服务时,不需要每次去服务中心查找,当某个节点eureka-server down掉之后,服务仍然能够在一定时间调用。

eureka-server

使用 Spring Initializr初始化Spring Cloud 项目:

pom.xml



	4.0.0

	com.springcloud
	eureka_server
	0.0.1-SNAPSHOT
	jar

	eureka_server
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.4.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
        //Spring Cloud 版本
		Finchley.SR1
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
        //引入Spring Cloud Eureka-Server 需要jar包
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

application.properties

server.port=8761
spring.application.name=eureka_server
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#默认为true 表示将自己作为客户端注册到eureka,由于作为eureka server,故设为false
eureka.client.registerWithEureka=false
#默认为true,表示从eureka server获取服务列表信息,eureka实现高可用时,可以设置为true
eureka.client.fetchRegistry=false
EurekaServerApplication.java
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class, args);
	}
}

eureka-client

同上使用Spring Initializr初始化Spring Cloud项目

pom.xml

//Spring Cloud Eureka Client 所需jar包

	org.springframework.cloud
	spring-cloud-starter-netflix-eureka-client

application.properties

server.port=8081
spring.application.name=client01
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#指定注册到eureka server实例ID
eureka.instance.instance-id=${eureka.instance.ip-address}:${server.port}
#表示将自己的ip注册到eureka server上面
eureka.instance.prefer-ip-address=true
#指定eureka client IP地址
eureka.instance.ip-address=127.0.0.1
EurekaClientApplication
@SpringBootApplication
//@EnableEurekaClient
@EnableDiscoveryClient
public class EurekaClientApplication {

	//注意:
	//@EnableDiscoveryClient:Spring Cloud 中对服务发现组件除了eureka之外,还有对Google的                                                        Zookeeper、Consul这两大组件提供了支持,
	// 这个注解可支持多组件,该注解在spring-cloud-commons这个项目中。
	//@EnableEurekaClient:顾名思义指的是eureka的客户端,该注解在spring-cloud-netflix项目中。

	public static void main(String[] args) {
		SpringApplication.run(EurekaClientApplication.class, args);
	}
}

eureka-server高可用

  • 单节点的eureka-server并不适合生产环境,当eureka-server 挂掉后,虽然eureka客户端有缓存服务列表的能力,短时间不影响服务间调用,但是eureka-server失去了服务列表信息更新能力,如果服务信息发生改动,比如IP、端口号,都会影响服务调用。
  • eureka-server可以通过运行多个实例,并且实例之间相互注册,维护服务列表信息,当其中一个节点挂掉之后,其它节点可继续提供服务信息。

application.properties

#默认为true 表示将自己作为客户端注册到eureka,由于作为eureka server,故设为false
eureka.client.registerWithEureka=false
#默认为true,表示从eureka server获取服务列表信息,eureka实现高可用时,可以设置为true
eureka.client.fetchRegistry=true

#指定配置文件
spring.profiles.active=node-01

application-node-01.properties

server.port=8761
spring.application.name=eureka_server_node_01
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka/

application-node-02.properties

server.port=8762
spring.application.name=eureka_server_node-02
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

eureka_client项目application.properties中

server.port=8081
spring.application.name=client01
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/
#指定注册到eureka server实例ID
eureka.instance.instance-id=${eureka.instance.ip-address}:${server.port}
#表示将自己的ip注册到eureka server上面
eureka.instance.prefer-ip-address=true
#指定eureka client IP地址
eureka.instance.ip-address=127.0.0.1
*Spring Boot 项目 支持jar方式运行,所以可以使用java -jar的方式指定配置
*java -jar eureka_server-0.0.1-SNAPSHOT.jar --spring.profiles.active=node-01
*java -jar eureka_server-0.0.1-SNAPSHOT.jar --spring.profiles.active=node-02

eureka-server添加用户认证

eureka_server项目pom中添加依赖


    org.springframework.boot
    spring-boot-starter-security

application.properties

#默认为true 表示将自己作为客户端注册到eureka,由于作为eureka server,故设为false
eureka.client.registerWithEureka=false
#默认为true,表示从eureka server获取服务列表信息,eureka实现高可用时,可以设置为true
eureka.client.fetchRegistry=true
#开启http basic认证
security.basic.enabled=true
#添加spring-boot-starter-security包,会默认一个user用户,在这里指定用户名
security.user.name=eureka
#添加spring-boot-starter-security包,会默认一个user用户,但密码随机生成,这里指定用户密码
security.user.password=eureka

#指定配置文件
spring.profiles.active=node-01

application-node-01.properties

server.port=8761
spring.application.name=eureka_server_node_01
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://${security.user.name}:${security.user.password}@localhost:8762/eureka/

application-node-02.properties同上

eureka_client项目application.properties

server.port=8081
spring.application.name=client01
eureka.client.serviceUrl.defaultZone=http://eureka:eureka@localhost:8761/eureka/,http://localhost:8762/eureka/
#指定注册到eureka server实例ID
eureka.instance.instance-id=${eureka.instance.ip-address}:${server.port}
#表示将自己的ip注册到eureka server上面
eureka.instance.prefer-ip-address=true
#指定eureka client IP地址
eureka.instance.ip-address=127.0.0.1

eureka-server自我保护

#eureka server在长时间内未收到某一个服务检查心跳,则会将该服务从列表中删除掉,默认30s,但是当网路出现故障时候,会出现大量服务与eureka server无法通信,此时将服务从eureka服务列表中删除,似乎不合理,eureka在此时开启自我保护功能,保证服务信息不被删除。
eureka.server.enable-self-preservation=true //启用自我保护

 

你可能感兴趣的:(Spring Cloud Eureka- 微服务注册与发现)