Spring Cloud Eureka--服务发现

本文介绍了Spring Cloud作为一个微服务框架的集合,包括其关键组件Eureka,用于服务注册与发现。Eureka包含服务端和客户端,通过@EnableEurekaServer和@EnableDiscoveryClient注解实现服务注册和发现。Eureka还具备心跳机制和客户端缓存,确保服务高可用性和负载均衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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进行介绍


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值