您的位置:首页 > 编程语言 > Java开发

Spring Cloud Eureka--服务发现

2016-12-12 12:01 591 查看
一、Spring Cloud 

    Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。最关键的是它足够简单,一般的开发人员只需要几天时间就可以学会它的基本用法。

    简言之,spring cloud 就是一堆微服务框架的一个集合。

    微服务框架离不开服务治理-注册与发现、智能路由负载均衡等主题。Spring Cloud 就集成了这一圈开发微服务必不可少的框架,整合成一套名为spring cloud,致力于让开发人员更快、更简单的面向服务开发。

    所以spring cloud包含了多个子项目,每个项目都是针对分布式服务开发而生的开源产品,如Netflix公司贡献的Netflix Eureka、Ribbon、Feign、Hystrix、Zuul都被spring 收纳成为spring cloud 重要组成部分,发挥着各自不同的重要作用。

    下面笔者就一一介绍spring cloud中5大主要核心组件,江湖人称“spring cloud 五大神兽”。

二、微服务架构

    简单的说,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。

三、Eureka 服务注册与发现

    使用类似dubbo等微服务架构开发应用,离不开服务的注册与发现。spring cloud Eureka (服务注册与发现中心)在spring cloud大家庭中就扮演了服务注册与发现的角色。

    这里先演示一个Eureka demo,直观的看看Eureka服务发现技能。

创建Eureka服务注册中心

1、引入pom依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>2、添加application.properties配置文件
server.port=1111

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/3、编写服务注册中心
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}运行main方法,访问http://localhost:1111/,显示如下



     这是spring cloud Eureka的服务端面板,可反馈服务发现、注册实例情况;系统当前资源使用情况。看到这个界面就表示Eureka server已经正常启动。那接下来就开始client客户端,即服务的编写,将每个服务注册到这个server中心。

创建Eureka服务提供方

1、引入pom文件

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>2、添加application.properties配置文件
spring.application.name=compute-service

#server.port=2222
server.port=2223

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
3、编写服务类
@RestController
public class ComputeController {

private final Logger logger = Logger.getLogger(getClass());

@Autowired
private DiscoveryClient client;

@RequestMapping(value = "/add" ,method = RequestMethod.GET)
public Integer add(@RequestParam Integer a, @RequestParam Integer b) {
ServiceInstance instance = client.getLocalServiceInstance();
Integer r = a + b;
logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r);
return r;
}
}Springboot 启动类
@EnableDiscoveryClient
@SpringBootApplication
public class ComputeServiceApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args);
}
}运行该main方法后,刷新http://localhost:1111/ 服务注册面板,可见



     当把服务提供工程的properties文件修改服务端口为2222时,再启动该main方法。可见2222、2223端口的两个服务均注册到了Eureka server端,显示在了server面板页面



四、Eureka原理分析

     通过demo,as usual,spring使用@EnableEurekaServer和@EnableDiscoveryClient注解,暴露Eureka服务中心和Eureka服务客户端,通过properties配置文件,指定server链接、端口,client同样匹配该服务链接,并指定自己的端口,启动-注册到EurekaServer并显示到Eureka监控界面。



 五、总结

    Eureka Server提供服务注册服务,各个服务节点启动后,会在Eureka Server中进行注册,这样Eureka Server中就有了所有服务节点的信息,并且Eureka有监控页面,可以在页面中直观的看到所有注册的服务的情况。

    同时Eureka有心跳机制,当某个节点服务在规定时间内没有发送心跳信号时,Eureka会从服务注册表中把这个服务节点移除。       Eureka还提供了客户端缓存的机制,即使所有的Eureka Server都挂掉,客户端仍可以利用缓存中的信息调用服务节点的服务。       Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。
下面将会对spring cloud有一组件-Ribbon进行介绍
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: