微服务项目名称 项目微服务中的角色
microservice-discovery-eureka 服务发现组件
microservice-provider-user 服务提供者
microservice-consumer-movie-ribbon-hystrix 服务消费者
microservice-gateway-zuul API Gateway
microservice-hystrix-turbine Hystrix聚合监控工具
microservice-hystrix-dashboard Hystrix监控界面

微服务构建实例

1:使用Maven插件构建镜像,在各个项目的pom.xml中添加以下内容。

<!-- 添加docker-maven插件 -->
<plugin>
<groupId>com.sptify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>itmuch/${project.artifactId}:${project.version}</imageName>
<forceTages>true</forceTages>
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resoureces>
<resourece>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

由配置可知,构建出来的镜像名称是itmuch/各个微服务的artifactId:各个微服务的版本,例如:microservice-discovery-eureka:0.0.1-SNAPSHOT。

2:为Eureka Server所在容器配置一个主机名(如discover),并让各个微服务使用主机名访问Eureka Server。

将所有微服务eureka.client.serviceUrl.defaultZone修改为如下内容:

eureka:
client:
serviceUrl:
defaultZone:http://discovery:8761/eureka/

3:在每个项目的根目录执行以下命令,构建Docker镜像。

mvn clean package docker:build

4:编写docker-compose.yml

version: '3'
#Version 2 file format的固定写法,为project定义服务
services:
#指定服务名称
microservice-discovery-eureka:
#指定服务所使用的镜像
image: itmuch/microservice-discovery-eureka:0.0.1-SNAPSHOT
#暴露端口信息
ports:
- "8761:8761"
microservice-provider-user:
image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT
#连接到microservice-discovery-eureka,这边使用的是SERVICE:ALIAS的形式
links:
- microservice-disvoery-eureka:discovery
-
microservice-consumer-movie-ribbon-hystrix:
image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT
links:
- microservice-disvoery-eureka:discovery
microservice-gateway-zuul:
image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT
links:
- microservice-disvoery-eureka:discovery
microservice-hystrix-dashboard:
image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT
links:
- microservice-disvoery-eureka:discovery
microservice-hystrix-turbine:
image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT
links:
- microservice-disvoery-eureka:discovery

测试,执行docker-compose up启动项目,即可看到Eureka Server上的微服务列表服务发布成功。

简化Compose的编写

同一个Compose工程中的所有服务共享一个隔离网络,可使用服务名称作为主机名来发现其他服务。

因此,将docker-compose.yml简化:

version: '2'
services:
discovery:
image: itmuch/discovery-eureka:0.0.1-SNAPSHOT
ports:
- "8761:8761"
microservice-provider-user:
image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT
microservice-consumer-movie-ribbon-hystrix:
image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT
microservice-gateway-zuul:
image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT
microservice-hystrix-dashboard:
image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT
microservice-hystrix-turbine:
image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT

编排高可用的Eureka Server

使用Compose编排Eureka Server集群。

1.执行以下命令构建Dokcer镜像。

mvn clean package docker:build

2.编写docker-compose.yml

version: '3'
services:
microservice-discovery-eureka-ha1:
hostname: peer1 #指定hostname
image: itmuch/discovery=eureka-ha:0.0.1:SNAPSHOT
links:
- discovery-eureka-ha2
ports:
- "8761:8761"
environment:
- spring.profiles.active=peer1
microservice-discovery-eureka-ha2:
hostname: peer2 #指定hostname
image: itmuch/discovery=eureka-ha:0.0.1:SNAPSHOT
links:
- discovery-eureka-ha1
ports:
- "8762:8762"
environment:
- spring.profiles.active=peer2

3.执行以下命令启动项目。

docker-compose up

但是,这样并不会成功,终端会输出异常。

因为存在循环依赖,links无法实现双向连接。

如何解决呢? 例如使用 ambassador pattern,使用外部DNS容器等。

编排高可用Spring Cloud微服务集群及动态伸缩

微服务项目名称 项目微服务中的角色
microservice-discovery-eureka-ha 服务发现组件
microservice-provider-user 服务提供者
microservice-consumer-movie-ribbon-hystrix 服务消费者
microservice-gateway-zuul API Gateway
microservice-hystrix-turbine Hystrix聚合监控工具
microservice-hystrix-dashboard Hystrix监控界面

1.由于使用了microservice-discovery-eureka-ha,需要将所有的微服务eureka.client.serviceUrl.defaultZone属性修改为如下内容:

eureka:
client:
service-url:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

2.在每个项目的根目录,执行以下命令创建Docker镜像。

mvn clean package docker:build

3.编写docker-compose.yml

version: "2"
services:
peer1:
image: itemuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
ports:
- "8761:8761"
enviroment:
- spring.profiles.active=peer1
peer2:
image: itemuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
hostname: peer2
ports:
- "8761:8761"
enviroment:
- spring.profiles.active=peer2
microservice-provider-user:
image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT
microservice-consumer-movie-ribbon-hystrix:
image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT
microservice-gateway-zuul:
image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT
microservice-hystrix-dashboard:
image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT
microservice-hystrix-turbine:
image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT

测试,执行docker-compose up启动项目。

然后可以在Eureka Server看到微服务列表。

执行以下命令,为各个微服务动态扩容,让除Eureka Server以外的所有微服务都启动3个实例。

docker-compose scale microservice-provider-user=3 microservice-consumer-movie-ribbon-hystrix=3 microservice-gateway-zuul=3
microservice-hystrix-turbine=3

使用Docker Compose编排Spring Cloud微服务的更多相关文章

  1. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

    本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...

  2. 【原创】Docker容器及Spring Boot微服务应用

    Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不 ...

  3. Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin

    前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...

  4. Spring Cloud微服务安全实战_00_前言

    一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介:  二.最终形成的架 ...

  5. spring cloud微服务实践五

    本篇我们来看看怎么实现spring cloud的配置中心. 在分布式系统中,特别是微服务架构下,可能会存在许多的服务,每个服务都会存在一个或多个的配置文件.那怎么多的配置文件的管理就会成为一个大问题. ...

  6. Spring Cloud微服务系列文,服务调用框架Feign

    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.    这种 ...

  7. Spring Cloud 微服务

    https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247486301&idx=2&sn=f6d45860269b61 ...

  8. 一张图了解Spring Cloud微服务架构

    Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来 ...

  9. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

随机推荐

  1. volatile实现原理--为什么实现了可见性却不能保证原子性

    本篇文章我们来解决一个问题  这也是面试面的比较多的问题,进阶阶段(高级)一般都会问到. volatile变量怎么保证可见性  为什么在并发情况下无法保证原子性? 比较懒了  摘了一段JVM原理的片段 ...

  2. webservcie学习之webservice是什么

    之前写代码,只是用到的时候才去看相关技术,用过后也没有再回头特别 去看,现在突然发现对一些技术的了解不够深刻,故现在准备再从头对用到的技术深入的学习下.就从webservice开始.首先对我不解的地方 ...

  3. 《中间件性能挑战赛--分布式统计和过滤的链路追踪》java 选手分享

    2020年6月份天池举办的<中间件性能挑战赛>可谓是异常激烈,本人抽业余时间报名参与,感受比赛惨烈的同时,也有诸多感慨哈,总结一个多月的赛程,多少有一些心得与大家分享 本文原创地址:htt ...

  4. 记一次Hadoop安装部署过程

    实验名称:Hadoop安装部署 一.实验环境: 虚拟机数量:3个 (1个master,2个slave:slave01,slave02) 主节点master信息: 操作系统:CentOS7.5 软件包位 ...

  5. Hive表的基本操作

    目录 1. 创建表 2. 拷贝表 3. 查看表结构 4. 删除表 5. 修改表 5.1 表重命名 5.2 增.修.删分区 5.3 修改列信息 5.4 增加列 5.5 删除列 5.6 修改表的属性 1. ...

  6. VRP OS Management

    From WizNote

  7. node中 path.join 和 path.resovle 区别

    console.log(__dirname) console.log('----') console.log(path.resolve(__dirname, '/a/b', '../')) conso ...

  8. 【剑指 Offer】08.二叉树的下一个节点

    题目描述 给定一颗二叉树和其中的一个节点,找出中序遍历序列的下一个节点.树中的节点除了有两个分别指向左右节点的指针,还有一个指向父节点的指针. Java public class Solution08 ...

  9. Jenkins Android APP 持续集成体系建设二—自动部署、执行测试任务,关联打包任务

    经过上一遍博客我们知道了怎么使用Jenkins自动打包,但打完包之后,我们还需要对新包进行回归测试,确定新包有没有问题,然后才能发布包,那么,话不多说,我们先来新建个自动化回归测试任务 新包自动化回归 ...

  10. python中re模块的使用(正则表达式)

    一.什么是正则表达式? 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合, ...