手把手教你用Spring Cloud和Docker构建微服务

Jenkins 微服务持续集成十五(Spring Cloud 微服务架构优化一:高可用生产部署服务器) 目录一、Jenkins + Docker + SpringCloud 部署方案优化二、Jenkins + Docker + SpringCloud 集群部署流程说明三、新增一台 Docker 服务器四、修改所有微服务配置1. eureka2. zuul3. admin4. gathering5. 提交微服务代码五、设计 Jenkins 集群项目的构建参数1. 安装 Extended Choice Parameter 插件支持多选框2. 创建流水线项目3. 添加参数六、构建测试1. 检查代码循环构建1.1 修 阅读详情

转载自:http://www.chinacloud.cn/show.aspx?id=20968&cid=12

什么是Spring Cloud?

  Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集。Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Connector)的概念。云平台连接器是一个接口,需要由云平台提供者进行实现,以便库中的其他模块可以与该云平台协同工作。

  Spring Boot

  Spring Cloud最重要的一点是它可以和Spring Boot一起工作,Spring Boot可以帮助开发者更容易地创建基于Spring的应用程序和服务。

  从Spring Boot项目名称中的Boot就可以看出来,Spring Boot的作用在于创建和启动新的基于Spring框架的项目。Spring Boot会选择最适合的Spring子项目和第三方开源库进行整合。大部分Spring Boot应用只需要非常少的配置就可以快速运行起来。Spring Boot包含的特性如下:

  创建可以独立运行的Spring应用。

  直接嵌入Tomcat或Jetty服务器,不需要部署WAR文件。

  提供推荐的基础POM文件来简化Apache Maven配置。

  尽可能的根据项目依赖来自动配置Spring框架。

  提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。

  没有代码生成,也没有XML配置文件。

  服务发现和智能路由

  每一个服务都含有一个特定意义的微服务架构。当你在Spring Cloud上构建微服务架构时,这里有几个基本概念需要首先澄清下。首先,你需要要先创建Configuration Service和Discovery Service两个基础服务。如下图所示:

  

手把手教你用Spring Cloud和Docker构建微服务

 

  上面的图片说明了四个微服务以及各个服务之间的依赖关系。

  Configuration service处于最顶端,黄色标识,而且被其它微服务所依赖。

  Discovery service处于最低端,蓝色标识,同时也被其它服务所依赖。

  绿色标识的两个微服务是我们本系列博文中用到的两个应用案例:电影和观影建议。

  Configuration Service

  Configuration Service在微服务架构中是一个非常重要的组件。如12要素应用理论所说, 微服务应用的配置应该存储在环境中,而不是本地项目中。

  Configuration service(配置服务)是一个必不可少的基础组件的原因是因为它可以对所有通过点对点和检索的基础服务进行服务管理。

  假设我们有多个部署环境。比如我们有一个临时环境和一个生产环境,针对每个环境的配置将会是不同的。每一个configuration service 将会由一个独立的Git仓库来存放环境配置。没有其它环境能够访问到这个配置仓库,它只是提供该环境中运行的配置服务罢了。

  

手把手教你用Spring Cloud和Docker构建微服务

 

  当Configuration service启动后,它将会指向那些根据配置文件配置的路径并启动对应服务。每一个微服务通过读取自己配置文件中的具体环境来运行。在这一过程中,配置是通过版本管理来进行的内部和集中化管理,更改配置不需要重启服务。

  通过Spring Cloud提供的服务终端,你可以更改环境配置,并向Discovery service(发现服务)发送一个刷新信号,所有的用户都会收到新的配置通知。

  Discovery Service

  Discovery Service(发现服务)是另一个重要的微服务架构的组件。Discovery Service管理运行在容器中的众多服务实例,而这些实例工作在集群环境下。在这些应用中,我们使用客户端的方式称之为从服务到服务。举个例子,我使用Spring Cloud Feign ,这是一个基于Restful风格的微服务提供的客户端开源项目,它是从Netflix OSS project项目中派生出来的。

  @FeignClient("movie") public interface MovieClient { @RequestMapping(method = RequestMethod.GET, value = "/movies") PagedResources findAll(); @RequestMapping(method = RequestMethod.GET, value = "/movies/{id}") Movie findById(@RequestParam("id") String id); @RequestMapping(method = RequestMethod.POST, value = "/movies", produces = MediaType.APPLICATION_JSON_VALUE) void createMovie(@RequestBody Movie movie); }

  在上面的例子中,我创建了一个Feign 客户端,并映射了一个REST API方法来暴露电影服务。使用@FeignClient注解,可以声明我想要为movie微服务而创建的客户端API。接下来我声明了一个我想要实现的服务映射。通过在方法上声明一个URL规则来描述一个REST API的路由规则。

  更令人兴奋的是,这一切在Spring Cloud中都很容易,我所要做的仅仅是知道service ID来创建我的Feign 客户端。服务的URL地址在运行时环境是自动配置的,因为每一个在集群中的微服务将会在启动时通过绑定serviceid的方式来进行注册。

  微服务架构中的其它服务,也是通过上面提到的方式运行。我只需要知道进行通讯服务的serviceid,所有的操作都是通过Spring自动绑定的。

  API Gateway

  API Gateway 服务是Spring Cloud的另一个重要组件(关于它的介绍可以阅读本篇文章)。它可以用来管理集群服务中的领域实体。下图的绿色六边形是我们提供的数据驱动服务,主要用来管理自己的实体类和数据库。通过添加API Gateway服务,我们可以为通过下面绿颜色的服务为每一个API路由创建一个代理暴露接口。

  

手把手教你用Spring Cloud和Docker构建微服务

 

  假设推荐服务和电影服务都暴露他们自己的REST API在自己管理的域实体上。API gataway通过discovery service和从其它服务注入的基于代理路由的 API方法。通过这种方式,包括推荐服务和电影服务将拥有一个完整定义的路由,通过暴露的REST API获得本地的微服务。API Gateway将会重定义路由请求到服务实例,这些请求都是基于HTTP的。

  示例项目

  我已经在GitHub上创建了一个实例项目:https://github.com/kbastani/spring-cloud-microservice-example,这个项目是一个端到端的原生云平台,使用Spring Cloud构建实际的微服务架构。

  基本概念:

  使用Docker进行集成测试

  混合持久化

  微服务架构

  服务发现

  API网关

  Docker

  使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。

  混合持久化

  混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:

  Neo4j(图形化)

  MongoDB(文档化)

  MySQL(关联)

  微服务架构

  这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。

  Service Discovery

  项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了

  Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。

  API 网关

  每一个微服务都关联Eureka,在整个集群中检索API路由。使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。

  Docker 实例

  下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。我们可以很优雅的使用Docker Compose在我们自己的主机上搭建全部的微服务集群。

  开始构建

  在这之前,请先移步至项目的GitHub 仓库。

  https://github.com/kbastani/spring-cloud-microservice-example

  克隆或者fork这个项目并且把源码下载到自己的电脑上。下载完毕后,你需要使用Maven和Docker来编译和构建本地的容器镜像。

  下载Docker

  首先,如果你还没有Docker请先下载它。可以跟随这个指南来获取Docker:https://docs.docker.com/installation/,然后在开发机上安装并运行。

  当然你也需要安装Docker Compose(https//docs.docker.com/compose/),这个指南将会帮到你:https://docs.docker.com/compose/install/。

  环境要求

  能够运行实例程序,需要在你的开发机上安装下面的软件:

  Maven 3

  Java 8

  Docker

  Docker Compose

  构建项目

  通过命令行方式来构建当前项目,在项目的根目录中运行如下的命令:

  $ mvn clean install

  项目将会根据pom.xml中的每一个项目声明中下载相应的依赖jar包。每一个服务都将会被构建,同时Maven的Docker插件将会自动从本地Docker Registry中构建每一个容器镜像。Docker将会在构建成功后,根据命令行运行mvn clean install来清除相应的资源。

  在项目成功构建后,你将会看到如下的输出:

  

 

  通过Docker compose 启动集群

  现在每一个镜像都成功构建完毕,我们使用Docker Compose来加速启动我们的集群。我已经将Docker Compose的yaml文件包含进了项目中,大家可以从GitHub上获取。

  现在我们通过下面的命令行启动微服务集群:

  $ docker-compose up

  如果一切配置都是正确的,每一个容器镜像将会通过在Docker上的虚拟容器和自动发现的网络服务来运行。当他们开始顺序启动时,你将会看到一系列的日志输出。这可能需要一段时间来完成,取决于运行你实例程序的机器性能。

  一旦容器启动成功,你将会通过Eureka主机看到通过Discovery service注册上来的应用服务。

  通过命令行终端复制粘贴下面的命令到Docker中定义的$DOCKER_HOST环境变量中。

  $ open $(echo \"$(echo $DOCKER_HOST)\"| \sed 's/tcp:\/\//http:\/\//g'| \sed 's/[0-9]\{4,\}/8761/g'| \sed 's/\"//g')

  如果Eureka正确的启动,浏览器将会启动并打开Eureka服务的仪表盘,如下图所示:

  

手把手教你用Spring Cloud和Docker构建微服务

 

  我们将会看到每一个正在运行的服务实例和状态。通过下面的命令来获取数据驱动服务,例如 movie 服务。

  $ open $(echo \"$(echo $DOCKER_HOST)/movie\"| \sed 's/tcp:\/\//http:\/\//g'| \sed 's/[0-9]\{4,\}/10000/g'| \sed 's/\"//g')

  这个命令将会访问根据导航网关终端提供的代理方式访问movie服务的REST API终端。这些REST API使用 HATEOAS 来配置,它是一个通过内嵌链接的方式支持自动发现服务的接口。

  { "_links" : { "self" : { "href" : "http://192.168.59.103:10000/movie" }, "resume" : { "href" : "http://192.168.59.103:10000/movie/resume" }, "pause" : { "href" : "http://192.168.59.103:10000/movie/pause" }, "restart" : { "href" : "http://192.168.59.103:10000/movie/restart" }, "metrics" : { "href" : "http://192.168.59.103:10000/movie/metrics" }, "env" : [ { "href" : "http://192.168.59.103:10000/movie/env" }, { "href" : "http://192.168.59.103:10000/movie/env" } ], "archaius" : { "href" : "http://192.168.59.103:10000/movie/archaius" }, "beans" : { "href" : "http://192.168.59.103:10000/movie/beans" }, "configprops" : { "href" : "http://192.168.59.103:10000/movie/configprops" }, "trace" : { "href" : "http://192.168.59.103:10000/movie/trace" }, "info" : { "href" : "http://192.168.59.103:10000/movie/info" }, "health" : { "href" : "http://192.168.59.103:10000/movie/health" }, "hystrix.stream" : { "href" : "http://192.168.59.103:10000/movie/hystrix.stream" }, "routes" : { "href" : "http://192.168.59.103:10000/movie/routes" }, "dump" : { "href" : "http://192.168.59.103:10000/movie/dump" }, "refresh" : { "href" : "http://192.168.59.103:10000/movie/refresh" }, "mappings" : { "href" : "http://192.168.59.103:10000/movie/mappings" }, "autoconfig" : { "href" : "http://192.168.59.103:10000/movie/autoconfig" } } }

  总结

  这是使用Spring Cloud和Docker构建微服务架构的系列博文的第一部分。在本文中,我们接触到了如下的概念:

  Service Discovery

  Externalized Configuration

  API Gateway

  Service Orchestration with Docker Compose

Java Microservices 和 Spring Cloud:介绍微服务架构,并使用Spring Cloud来说明其在Java中的实现 介绍 什么是微服务架构 微服务架构的优势和挑战 微服务架构基础 服务分解策略(如何决定服务的边界) 数据管理,如何在分散的服务之间维持数据一致性 服务之间的通信方式 Java Microservices 在Java环境中实现微服务架构的一般步骤 示例:使用Spring Boot创建一个微服务 Spring Cloud介绍 Spring Cloud所提供的功能和组件(如配置管理,服务发现,断路器等) 如何使用Spring Cloud来解决微服务中的某些常见问题 使用Spring Cloud实现微服务 阅读详情

相关推荐

基于Spring Boot 和Spring Cloud和Docker的微服务架构项目实战

项目名称 piggymetrics 转发+关注,然后私信回复关键字 “项目”即可获得《piggymetrics》的源码地址 项目简介 这是一个教程项目,演示了使用Spring Boot,Spring Cloud和Docker的微服务架构模式。顺便说一下,拥有漂亮的用户界面。 功能服务 PiggyMetrics被分解为三个核心微服务。它们都是围绕某些业务领域组织的可独立部署的应用程序。 开户服务 包含一般用户输入逻辑和验证:收入/支出项目,储蓄和账户设置。 ...

一入Java深似海 2354

Docker+jenkins自动化部署SpringCloud微服务项目

Docker+jenkins自动化部署SpringCloud微服务项目

lzbshaaa的博客 1274

用Spring Cloud和Docker构建微服务

什么是Spring Cloud?   Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集。Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Connector)的概念。云平台连接器是一个接口,需要由云平台提供者进行实现,以便库中的其他模块可以与该云平台协同工作。   Spring Boot   S

一代枭雄的专栏 929

Docker搭建Jenkins并部署SpringCloud服务

Docker搭建Jenkins,部署SpringCloud项目

weixin_43577131的博客 2283

Spring-Cloud 微服务 Docker 部署

基于SpringBoot | Spring Cloud & Alibaba | Mybatis-Plus | Vue3 | vite2 | TypeScript | Ant-Design-Vue UI的多租户SaaS开发框架

xinyi_java的博客 2084

ZYNQ实战:PS端驱动DMA实现高效数据流转与验证

本文详细介绍了在ZYNQ平台上通过PS端驱动DMA实现高效数据流转的实战方法。从ZYNQ的PS与PL数据交互基础出发,深入解析DMA核心价值,包括硬件平台搭建、Vivado配置、PS端软件架构设计及性能优化技巧,帮助开发者提升数据传输效率与系统性能。

weixin_29192141的博客 436

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

在启动微服务的时候,加入参数: spring.profiles.active 来读取对应的配置。idea中修改注册中心eureka的配置,单节点换成集群。从Jenkins服务器拷贝公钥到docker2远程服务器。添加构建参数——》多选框:部署服务器。逗号必须得是英文,否则出错。成功访问前端数据库中的数据。系统配置中添加远程服务器。查看eureka注册结果。该插件可以支持多选框。推送上传gitlab。

quanzhan_King的博客 3426

STM32CubeMX安装避坑指南:为什么你的Java环境总是报错?

本文针对STM32CubeMX安装过程中最常见的Java环境报错问题,提供了一套完整的诊断与解决方案。文章深入剖析了JRE版本冲突、环境变量配置错误、路径权限等核心原因,并给出了从系统级检查到手动修正环境变量的详细步骤,帮助开发者彻底解决安装难题,顺利开启STM32开发之旅。

prometheus9mon的博客 226

docker + jenkins + springcloud 打包,部署,发布

折腾好久了呀~今天终于出了一点点成果,全部是辛酸,含泪写完这篇博客。 SpringCloud教程:方志朋 Jenkins 安装:推荐这位老铁的博客(centos版本) Docker CE 安装:推荐这位小哥哥的博客(centos版本) Jenkins全局工具配置:jdk、maven以及git路径的配置 Jenkins 与 Github集成:推荐博客 开始: ...

一次次失望后的平静 5597

VS2103+Intel2013+MSMPI运行Fortran并行程序

VS2103+Intel2013+MSMPI运行Fortran并行程序MSMPI安装新建Fortran90项目编写Fortran并行程序在cmd运行编译完成的执行文件 MSMPI安装 我这里采用的是Microsoft MPI v9.0.1,可以点此下载。下载完成后同时安装msmpisdk.msi、msmpisetup.exe两个文件,安装位置默认即可。 其中msmpisdk.msi的默认安装路径在C:\Program Files (x86)\Microsoft SDKs\MPI,该文件包含了mpi环境所需

weixin_43176703的博客 2937

【UOJ170】Picks loves segment tree VIII

【题目链接】 点击打开链接 【前置阅读】 【BZOJ4695】最假女选手 【BZOJ3064】【TYVJ1518】CPU监控【UOJ169】【UR #11】元旦老人与数列 【思路要点】 前置阅读中的前两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们

cz_xuyixuan的博客 1249

在 Solid 中集成 BlockSuite:solid-basic 示例完整解析

本文基于 BlockSuite 仓库中的 [examples/solid-basic](https://link.gitcode.com/i/81787f1fadeb23310019116d2aa68bbc) 示例,讲解如何将 BlockSuite 编辑器与文档集合封装进 Solid 应用中,并完成多文档的创建、切换与展示。读完本文,你将掌握 `pnpm create vite` 脚手架与 Blo

gitblog_00146的博客 1023

高通蓝牙学习-- 关于Android 蓝牙的介绍

本文详细介绍了AOSP蓝牙架构及高通QCA芯片的蓝牙功能实现方案。主要内容包括:1)AOSP蓝牙架构在不同Android版本中的层次结构,重点分析BTHIDL层和libbt-vendor关键组件;2)QCA芯片的引导流程说明;3)两种获取libbt-vendor源码的方式(Google官方源和国内镜像源);4)针对QCA6595/6696/66x8/67x7芯片的具体实现方案,包括固件文件定义、厂商事件处理和补丁下载流程;5)蓝牙调试方法,包括logcat日志分析、HSU和Ellisys硬件跟踪技术。文章为

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 494

Gradle - 与Spring Cloud项目集成 构建微服务架构

本文探讨了如何使用Gradle构建Spring Cloud微服务架构。文章首先介绍了微服务架构的核心特征、优势与挑战,以及Spring Cloud的核心组件。然后详细讲解了多模块项目结构设计,包括父项目配置和子模块划分原则。重点阐述了Gradle在微服务中的作用,如依赖管理、多模块构建和构建自动化等。通过示例代码展示了父项目的Gradle配置方法,包括版本管理、插件应用和依赖定义。全文旨在帮助开发者利用Gradle高效构建和管理Spring Cloud微服务项目。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

小龙虾OpenClaw卸载全攻略,彻底清理缓存和配置,干净无残留!

不想要的小龙虾OpenClaw怎么彻底卸载?🦞本文教你如何彻底的卸载OpenClaw⚡️,Windows/macOS/Linux通用,干净无残留🧹

XiaoqiangClub的博客 313

微信终于支持“多设备同时在线”?我用 NAS + Docker 搭了一个云端微信系统,多端共享24小时在线

通过Docker 容器,将微信运行在云端并通过浏览器访问,实现多设备共享同一微信会话 📱。本文详细介绍完整部署流程、docker-compose 配置及资源控制方案,让微信变成“可访问的云桌面应用” ✨

XiaoqiangClub的博客 870

构建弹性可扩展的微服务:Spring Boot 与 Spring Cloud 实战指南

构建弹性可扩展的微服务:Spring Boot 与 Spring Cloud 实战指南 项目介绍 《Microservices with Spring Boot and Spring Cloud, Second Edition》是一本由Packt Publishing出版的书籍,专注于使用Spring Boot和Spring Cloud构建和部署微服务。本书的代码仓库提供了丰富的示例代码,帮助开发...

gitblog_00038的博客 1264

数据库课程案例——电力公司收费管理系统分析与实践,完整带SQL语句

某电力公司收费管理信息系统实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;实现客户用电信息管理(客户号、月份、用电类别号、用电度数);实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为“未收”;实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;创建存储过程统计指定月份应收费用和实收费用;创建存储过程查询指定月份未交费的用户信息,以便崔费;创建

qq_44242804的博客 2762

spring-boot-microservices-course:构建微服务架构的实战指南

spring-boot-microservices-course:构建微服务架构的实战指南 在当今快速发展的软件行业中,微服务架构已成为企业级应用的首选方案。今天,我们将为您介绍一个开源项目——spring-boot-microservices-course,该项目旨在帮助开发者深入理解和实践Spring Boot微服务开发。 项目介绍 spring-boot-microservices-cour...

gitblog_00046的博客 1455

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 客户端到服务器端的通信过程及原理
下一篇: 使用RESTful风格开发Java Web
rich frain
博客等级 码龄9年 8粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值