Spring Cloud搭建微服务架构----服务注册与发现

注册到Eureka

服务注册到Eureka,须要提供服务自身的元信息(如:主机,端口等),Eureka经过一个服务从各个实例接受心跳信息。若是心跳接受失败或超过配置时间,实例会从注册中心移除。git

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

@EnableEurekaClient 声明一个注册实例,@EnableDiscoveryClient能够将实例在Eureka上生效。github

application.ymlweb

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

defaultZone 将注册中心链接提供给客户端,能够理解为一个心跳url。spring

服务元信息:缓存

  • ${spring.application.name} 实例名称;
  • ${server.port} 实例端口;

服务状态监控

监控的目的是当服务提供者不可用时,服务会从注册中心下掉。当服务可用时可进行注册提供服务;springboot

服务提供者配置:app

spring.application.name=compute-service
server.port=9001

eureka.client.serviceUrl.defaultZone=http://localhost:5000/eureka/
eureka.client.healthcheck.enabled=true //表明开放服务健康检查功能
eureka.instance.statusPageUrlPath=/info
eureka.instance.healthCheckUrlPath=/health

同时须要引用actuator模块,此模块在涉及到健康健康,状态信息都须要引用依赖。spring-boot

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

注册中心配置:fetch

server.port=5000

eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.server.enableSelfPreservation=false //不开放自身缓存,开放的话,会将服务列表在本地缓存

eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

高可用

Eureka服务端没有后台存储,但注册的服务实例都须要发送心跳,保持自身在注册中心可用(可在内存存储状态),客户端一样保持一份备份,没必要每次请求都获取。ui

代码实例

注册中心

服务提供者1

服务提供者2

后记

Eureka自己仍是太新了,在真实项目中服务发现自己是一个很是重要的组件模块,市面上也少见商用的文档,建议仍是实用比较传统的,有更好保证的解决方案。推荐使用Zookeeper。

相关文章
相关标签/搜索