Spring Cloud 微服务示例

概述

Spring Cloud提供了将Netflix开源产品集成到Spring Boot应用的能力,主要包括服务发现Eureka、熔断(Circuit Breaker) Hystrix、智能应用路由Zuul 和客户端负载均衡Ribbon。基于这个框架,开发人员可以非常容易地构建微服务应用。本示例已经Docker化,既可以在本地的测试环境中运行,也可以部署到阿里云容器服务上。

服务化应用

示例模拟的场景是企业内部应用服务化,服务之间通过API相互访问。foo服务和bar服务是两类基本服务,允许内网其他服务通过API访问,但不对外网提供服务。foobar对外提供服务,在处理时需要调用foo服务和bar服务。

服务发现机制由discovery-server提供,基于Eureka实现。由于discovery-server的业务无关性,开发人员可以直接使用Docker镜像。

foobar服务通过注册到智能应用路由gateway服务上对外提供服务,gateway基于Zuul,其代码业务无关,开发人员可以直接使用其Docker镜像,但由于zuul是通过配置文件来描述不同的服务对应的URL访问模式,所以在实际使用中需要改变镜像中的配置文件,或者通过挂载Volume实现配置文件的共享和修改。

foo, bar和foobar的代码中都包含了Eureka和Ribbon Client,实现了向Eureka的自注册和查询Eureka的能力,Ribbon实现了客户端的负载均衡。本示例中没有引入Hystrix。

逻辑架构

服务间的逻辑架构如下图所示。

每个服务在运行时都可以根据负载水平扩展或收缩,所以在运行的时候服务间的逻辑关系视图可以表示如下。

运行

本地运行Docker容器,数据库连接MySQL

在项目根目录下运行如下命令即可启动本地测试环境。

docker-compose up -d

部署到阿里云容器服务

使用MySQL,使用docker-compose.yml。使用RDS见下文。

使用RDS(MySQL)数据库

数据库连接使用RDS的部署文件为(docker-compose.acs.yml

docker-compose.acs.yml, 需要将{rds-name}替换为RDS(MySQL)的名字,并将下面的数据库、用户名和口令进行更新。

  mysql:
    external:
      host: {rds-name}.mysql.rds.aliyuncs.com
      port: 3306
    environment:
      - MYSQL_ROOT_PASSWORD=passw0rd
      - MYSQL_DATABASE=foodb
      - MYSQL_USER=user1
      - MYSQL_PASSWORD=passw0rd

OSSFS

如果在阿里云上开通了OSS,则可使用OSSFS。

  bar:
    image: registry.aliyuncs.com/jingshanlb/bar
    environment:
      - EUREKA_SERVER_LIST=http://discovery1:8761/eureka/,http://discovery2:8761/eureka/
      - SPRING_PROFILES_ACTIVE=cloud
      - SERVER_PORT=8080
      - MANAGEMENT_PORT=8081
    volumes:
      - 'foobar_upload:/upload'

编译运行及构建镜像

为所有服务都构建镜像

./build-all.sh

运行前需要修改脚本中的REGPREFIX变量。

镜像全部上传到容器Hub

./push-all-images.sh

运行前需要修改脚本中的REGPREFIX变量,并Docker登录。

单独构建服务

cd {service directory}
./gradlew build

运行

cd {service directory}
java -jar build/libs/{service name}-0.0.1-SNAPSHOT.jar

构建Docker镜像

cd {service directory}
docker build -t {service name} .

访问服务

Discovery Server

返回在Eureka中注册的服务实例信息,JSON格式。

curl -H "Accept: application/json" http://{discovery hostname}:8761/eureka/apps

用浏览器访问http://{discovery hostname}:8761/显示Eureka页面。

Gateway

通过Gateway访问foobar页面。

curl http://{gateway hostname}:8080/acs/index.html

通过Gateway访问foobar API。

curl http://{gateway hostname}:8080/acs
curl http://{gateway hostname}:8080/acs/message

Spring Eureka server. Code in discovery-server. Visit localhost:8761 to see which services are registered in.

Foobar 服务
curl http://{hostname}:{port}/
curl http://{hostname}:{port}/message

Foobar通过Discovery Server找到foo和bar,http://{hostname}:{port}/message返回foo和bar组合消息。

Foo服务
curl http://{hostname}:{port}/message

Foo访问MySQL数据库,通过docker-compose文件中的参数配置变化,可以很容易地切换到阿里云RDS。

Bar服务
curl http://{hostname}:{port}/message

另外,Bar服务中包含spring actuator。配置信息在services/bar/src/main/resources/application.yml

Actuator官方示例:Building a RESTful Web Service with Spring Boot Actuator

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud 微服务架构实战代码是一个基于 Spring Cloud 微服务解决方案的实践项目。它通过将常见的微服务技术组件和应用场景进行集成和示例演示,使读者能够深入了解和学习 Spring Cloud 微服务架构的实际应用。 该项目包含多个模块,其中包括注册中心(Eureka)、配置中心(Config)、网关(Zuul)、负载均衡(Ribbon)、链路跟踪(Sleuth)、熔断器(Hystrix)等,涵盖了微服务架构中的关键技术组件。在实现过程中,项目采用了 Spring Boot 来简化微服务架构的搭建和开发,并以 Maven 进行依赖管理和构建。 通过该项目的学习,读者可以了解到微服务架构的基本概念、实际应用场景和解决方案,掌握 Spring Cloud 微服务架构的相关技术和工具的实际应用,了解微服务架构的开发和部署流程,掌握基于 Spring Boot 的微服务开发和集成方法,从而提高微服务架构的设计实现和部署能力。 总之,Spring Cloud 微服务架构实战代码是一份完整的微服务架构实践项目,它可以帮助读者深入学习和了解微服务架构的实际应用,并具备较高的实际参考价值。 ### 回答2: Spring Cloud是一个开源的微服务架构实战代码,能够让开发人员在构建分布式系统时快速开发和部署微服务。它诞生于Spring项目之上,提供了基于Spring Boot的一套开发工具和服务,可以方便地管理和实现微服务架构的各项需求。 Spring Cloud包含了许多组件,如Eureka、Feign、Hystrix、Zuul等,这些组件都可以独立使用,也可以混合使用,相互之间的集成非常容易。例如,Eureka提供了服务注册与发现的能力,Feign支持微服务之间的远程调用,Hystrix可以提供服务的自我保护机制,Zuul可以提供API网关的功能,等等。 通过使用Spring Cloud,开发人员可以有效地解决微服务中需要处理的分布式问题,例如服务发现、服务注册、服务负载均衡、熔断、容错、路由、安全等等。此外,Spring Cloud还提供了一些常用的开发工具,如Spring Cloud Config,它可以帮助团队在开发和发布过程中有效地管理和配置系统的环境和配置文件。 总之,Spring Cloud是一套非常完善,且易于集成、扩展的微服务架构实战代码,尤其适用于企业级和大型系统的开发。它能够快速地实现微服务的各项技术需求,提高开发效率,使得开发人员更加专注于业务逻辑的开发,而不用再花费大量时间和精力处理微服务本身的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值