Spring Cloud Eureka服务注册中心 单节点搭建(学习总结)

一、前言:

本文主要搭建Spring Cloud Eureka服务注册中心(单节点),不过一般生产环境都是多节点负载均衡,形成一个服务注册中心集群,这样一个注册中心崩了不会影响整个系统的运行以及接口的调用。本文基于SpringBoot 1.5.2,Spring Cloud Camden.SR6版本编写,版本不一致可能会有差异。下面就学习总结记录一下:

二、新建一个Eureka-Server:

首先引入依赖pom.xml:



	4.0.0

	com.springcloud.wsh
	springcloud_eureka_server
	0.0.1-SNAPSHOT
	jar

	springcloud_eureka_server
	Spring Cloud Eureka服务提供者

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

	
		UTF-8
		UTF-8
		1.8
		Camden.SR6
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka-server
		
	

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

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



三、启动类加上@EnableEurekaServer注解,开启Eureka服务发现的功能。

@SpringBootApplication
//@EnableEurekaServer注解的作用: 开启Eureka服务发现的功能
@EnableEurekaServer
public class SpringcloudEurekaServerApplication {

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

四、编写application.yml文件:主要配置一些端口号、应用名称、以及服务注册中心地址等等。

server:
  port: 1111  #服务端口号
eureka:
  client:
    fetch-registry: false  #是否检索服务
    register-with-eureka: false  #表示不向Eureka注册自身服务
    service-url: #服务注册中心地址,其他服务可以通过指定eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/注册到Eureka上
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  instance:
    #主机名
    hostname: localhost
spring:
  application:
    #服务名称
    name: eureka-server

到此,Eureka服务发现者已经搭建好。

五、搭建Eureka Client服务提供者

首先引入依赖pom.xml:



	4.0.0

	com.springcloud.wsh
	springcloud_eureka_client
	0.0.1-SNAPSHOT
	jar

	springcloud_eureka_client
	Spring Cloud Eureka服务提供者

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

	
		UTF-8
		UTF-8
		1.8
		Camden.SR6
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka
		

		
			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
			
		
	



六、启动类加上@EnableDiscoveryClient注解,使其成为Eureka的一个服务提供者。

@SpringBootApplication
//@EnableEurekaClient
@EnableDiscoveryClient //注册Eureka客户端
public class SpringcloudEurekaClientApplication {

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

七、编写application.yml配置文件:

主要是要指定服务注册中心的地址,端口号等等

server:
  port: 2222 #服务端口号
spring:
  application:
    #服务名称,对应注册到Eureka的实例名称,后续Zuul路由映射的serviceId也是根据这个
    name:  eureka-client
eureka:
  instance:
    #主机名
    hostname: localhost
  client:
    serviceUrl:
      #服务注册中心的地址,指定这个会向Eureka注册一个名叫eureka-client的客户端
      #单节点Eureka服务注册中心,不适用与生产环境,实际生产会用到Eureka Server集群
      defaultZone: http://localhost:1111/eureka/

#这里可以定义一些自定义的参数,可以使用@Value("${com.springcloud.author}")获取自定义参数的值
com:
  springcloud:
    author: weixiaohuai
    date: 2018-09-07 10:10

八、新建测试Controller:TestController.java:

注意:可以引入discoveryClient获取当前服务实例的一些信息。可以使用@Value注解获取在配置文件自定义的一些参数。

//@RestController注解是一个组合注解, @RestController = @Controller  + @ResponseBody
@RestController
public class TestController {

    private static Logger logger = LoggerFactory.getLogger(TestController.class);

    @Autowired
    private DiscoveryClient discoveryClient;

    //获取配置文件中的自定义参数
    @Value("${com.springcloud.author}")
    private String author;
    @Value("${com.springcloud.date}")
    private String date;

    @GetMapping("/test")
    public String test() {
        //获取当前服务的实例
        ServiceInstance serviceInstance = discoveryClient.getLocalServiceInstance();
        String info = "hello eureka, 主机名:" + serviceInstance.getHost() + ", service_id:" + serviceInstance.getServiceId() + " 作者: " + author + " / 日期: " + date;
        logger.info(info);
        return info;
    }

}

九、启动项目:

浏览器访问http://localhost:1111/,如下图。可以看到eureka-client已经成功注册到Eureka上面。

Spring Cloud Eureka服务注册中心 单节点搭建(学习总结)_第1张图片

接着我们访问http://localhost:2222/test,可以访问到TestController中定义的测试方法:如下图

 

十、扩展

Eureka内部维护服务节点的机制:

【a】服务下线

迭代更新终止访问某一个或者多个服务节点时,在正常关闭服务节点的情况下,Eureka Client会告诉Eureka Server我要下线了,Eureka Server收到请求后会将该服务实例运行状态UP修改为DOWN

【b】失效剔除

Eureka Server在启动完成后会创建一个定时器每隔60秒检查一次服务健康状况,如果其中一个服务节点超过90秒未检查到心跳,那么Eureka Server会自动从服务实例列表内将该服务剔除。(内存溢出杀死进程服务器宕机非正常流程关闭服务节点)

【c】自我保护

Eureka Server自我保护机制会检查最近15分钟内所有Eureka Client正常心跳的占比,如果低于85%就会被触发保护机制,当触发自我保护机制Eureka Server就会锁定服务列表,不让服务列表内的服务过期,不过这样我们在访问服务时,得到的服务很有可能是已经失效的实例,如果是这样我们就会无法访问到期望的资源,会导致服务调用失败,所以这时我们就需要有对应的容错机制熔断机制

关闭自我保护: 在application.properties配置文件中加入代码:

eureka.server.enable-self-preservation=false

到此,我们单节点的Eureka服务注册中心已经搭建完成,本文是笔者在学习SpringCloud的时候的一些总结,仅供参考,大家一起学习,共同进步!

你可能感兴趣的:(SpringCloud,SpringBoot)