`
liujiekasini0312
  • 浏览: 147595 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Cloud构建微服务架构(一)服务注册与发现

 
阅读更多

Spring Cloud构建微服务架构(一)服务注册与发现

Spring Cloud简介

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。

微服务架构

“微服务架构”在这几年非常的火热,以至于关于微服务架构相关的产品社区也变得越来越活跃(比如:netflix、dubbo),Spring Cloud也因Spring社区的强大知名度和影响力也被广大架构师与开发者备受关注。

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

对于“微服务架构”,大家在互联网可以搜索到很多相关的介绍和研究文章来进行学习和了解。也可以阅读始祖Martin Fowler的《Microservices》,本文不做更多的介绍和描述。

服务注册与发现

在简单介绍了Spring Cloud和微服务架构之后,下面回归本文的主旨内容,如何使用Spring Cloud搭建服务注册与发现模块。

这里我们会用到Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon)等。

所以,我们这里的核心内容就是服务发现模块:Eureka。下面我们动手来做一些尝试。

创建“服务注册中心”

创建一个基础的Spring Boot工程,并在pom.xml中引入需要的依赖内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<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-server</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>

通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。这一步非常的简单,只需要在一个普通的Spring Boot应用中添加这个注解就能开启此功能,比如下面的例子:

1
2
3
4
5
6
7
8
9
10
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}

在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties中问增加如下配置:

1
2
3
4
5
server.port=1111
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

为了与后续要进行注册的服务区分,这里将服务注册中心的端口通过server.port属性设置为1111

启动工程后,访问:http://localhost:1111/

可以看到下面的页面,其中还没有发现任何服务

altalt

该工程可参见:Chapter9-1-1/eureka-server

创建“服务提供方”

下面我们创建提供服务的客户端,并向服务注册中心注册自己。

假设我们有一个提供计算功能的微服务模块,我们实现一个RESTful API,通过传入两个参数a和b,最后返回a + b的结果。

首先,创建一个基本的Spring Boot应用,在pom.xml中,加入如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<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>

其次,实现/add请求处理接口,通过DiscoveryClient对象,在日志中打印出服务实例的相关内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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;
}
}

最后在主类中通过加上@EnableDiscoveryClient注解,该注解能激活Eureka中的DiscoveryClient实现,才能实现Controller中对服务信息的输出。

1
2
3
4
5
6
7
8
9
10
@EnableDiscoveryClient
@SpringBootApplication
public class ComputeServiceApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args);
}
}

我们在完成了服务内容的实现之后,再继续对application.properties做一些配置工作,具体如下:

1
2
3
4
5
spring.application.name=compute-service
server.port=2222
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

通过spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。

eureka.client.serviceUrl.defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置。

为了在本机上测试区分服务提供方和服务注册中心,使用server.port属性设置不同的端口。

启动该工程后,再次访问:http://localhost:1111/

可以看到,我们定义的服务被注册了。

altalt

该工程可参见:Chapter9-1-1/compute-service

分享到:
评论

相关推荐

    Spring Cloud构建微服务架构

    它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复...

    Spring Cloud构建微服务架构.doc

    Spring Cloud构建微服务架构是现代企业级应用开发的热门选择,尤其在Java生态系统中,它利用Spring Boot的便利性,简化了云应用的构建过程。Spring Cloud作为一个集合体,涵盖了多个子项目,如Config用于配置管理,...

    使用Spring Cloud和Docker构建微服务

    在使用Spring Cloud构建微服务时,可以发现如下几个核心组件:配置管理、服务发现、断路器和分布式会话。配置管理遵循了十二因素应用原则中的配置管理部分,服务发现则是微服务架构中的关键组件,它允许服务间相互...

    一个使用Spring Cloud构建微服务架构的基本步骤和示例配置

    一个使用Spring Cloud构建微服务架构的基本步骤和示例配置 请注意,这只是一个非常高级的概述和示例。在实际项目中,你可能需要处理更多复杂的场景,如安全配置、服务间的调用跟踪、日志聚合等。此外,Spring Cloud...

    蚂蚁课堂-第四期-基于SpringCloud构建微服务电商项目

    蚂蚁课堂-第四期-基于SpringCloud构建微服务电商项目 (无密) |____035-自动化运维-基于Docker+Jenkins实现自动化部署.rar |____034-秒杀系统设计-基于责任链设计模式与网关实现限流.rar |____033-秒杀系统设计-基于...

    打造Spring Cloud构建微服务架构的最全资料

    本资料旨在提供最全面的Spring Cloud构建微服务架构的知识,帮助开发者深入理解和实践这一强大的框架。 1. **Spring Boot基础** 在开始Spring Cloud之前,了解Spring Boot的基本概念和使用是必要的。Spring Boot...

    这本书介绍了如何使用 Spring Boot 和 Spring Cloud 构建微服务架构,是一个很好的学习资源

    涵盖了服务注册与发现、配置中心、负载均衡、断路器等核心功能。 微服务开发实践:通过实际的案例和示例,演示了如何使用 Spring Boot 和 Spring Cloud 构建微服务应用程序。包括服务拆分、服务间通信、服务治理等...

    目前倾力于平台架构的升级,原计划使用springboot+springcloud构建微服务架构

    标题提到的"目前倾力于平台架构的升级,原计划使用springboot+springcloud构建微服务架构",这表明了一个正在或即将进行的项目升级,其核心是将原有的单体架构转变为微服务架构,以提高系统的可扩展性、灵活性和可靠...

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台,集成OAuth2认证、集成短信验证码登录、微信小程序登录、FlyWay数据库版本管理、网关集成Swagger聚合所有服务API文档。基于SpringBoot...

    Spring Cloud实战 _springcloud实战_springcloud_

    《Spring Cloud实战》一书深入探讨了Spring Cloud这一强大的微服务框架,它是当前软件开发领域中最受欢迎的构建微服务架构的工具。Spring Cloud基于Spring Boot的便利性,为开发者提供了全面的微服务开发支持,包括...

    Spring cloud与docker高并发微服务架构设计实施(试读)

    通过Spring Cloud可以轻松构建一些常见的分布式系统模式,比如配置中心、服务注册与发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等。Spring Cloud的目标是让...

    SpringCloud学习之服务注册与发现

    本教程将深入探讨Spring Cloud中的服务注册与发现机制,这是构建微服务生态系统的关键组成部分。 首先,我们要理解什么是服务注册与发现。在分布式环境中,服务不再像单体应用一样运行在同一台服务器上,而是分散在...

    使用Spring-Cloud构建微服务.pptx

    使用Spring Cloud构建微服务 Spring Cloud是一个相对比较新的微服务框架,2016年才推出...使用Spring Cloud构建微服务可以快速的构建复杂的分布式系统,并且提供了多种组件和工具来帮助开发者快速的构建微服务架构。

    spring微服务架构:使用spring cloud构建微服务-脑图

    spring团队对新一代软件开发的思索。 为什么软件开发是spring boot? 为什么软件开发是spring cloud? 如何使用spring cloud搭建微服务。

    spring-cloud 微服务系统架构 ppt

    Spring Cloud提供了Eureka组件,它是一个基于REST的服务注册与发现工具,允许服务实例向注册中心注册自己的元数据,并让其他服务查询这些信息来找到并调用它们。 2. **负载均衡**:为了分散请求压力,Spring Cloud...

    springcloud快速构建微服务应用

    根据提供的标题、描述以及部分内容,我们可以总结出关于“Spring Cloud快速构建微服务应用”的一系列重要知识点。接下来将详细解析这些内容。 ### Spring Cloud快速构建微服务应用 #### 一、Spring Cloud简介 ...

    spring boot 2.6.11+springcloud Swagger3构建微服务项目源码

    在本项目中,我们主要关注的是使用Spring Boot 2.6.11、Spring Cloud以及Swagger3构建微服务架构的过程。这些技术都是现代云应用开发中的核心组件,它们各自提供了强大的功能来简化开发和增强应用的可维护性。 首先...

    Spring Cloud与Docker高并发微服务架构设计实施.rar

    其次,Eureka是Spring Cloud的服务注册与发现组件,它允许服务实例在启动时向注册中心注册自身,其他服务可以通过注册中心找到并调用这些服务。这样就实现了服务间的松耦合和解耦。 再者,Zuul和Netflix OSS的...

    基于Spring Cloud的微服务架构实践指南 .zip

    本项目是一个基于Spring Cloud的微服务架构实践指南,涵盖了从服务注册与发现、服务消费、断路器、分布式配置中心到消息驱动的微服务等多个方面的教程和示例代码。通过本项目,开发者可以学习到如何使用Spring Cloud...

    Spring cloud 服务注册与发现

    总之,Spring Cloud 的服务注册与发现机制是构建大规模微服务架构的重要基石,它简化了服务之间的交互,提高了系统的容错性和可用性。无论是选择Eureka还是Consul,都能帮助我们构建出更加健壮、灵活的分布式系统。...

Global site tag (gtag.js) - Google Analytics