微服务项目名称 项目微服务中的角色
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. Spark的checkpoint源码讲解

    一.Checkpoint相关源码分为四个部分 1.Checkpoint的基本使用:spark_core   &   spark_streaming 2.初始化的源码 3.Checkpoint的 ...

  2. MySQL安装8.0图文教程。超级详细

    数据库安装 1.官网下载 接下来点击不用登录注册 2.安装 点击安装服务端 ,然后点击下一步 选择自己安装目录(一定要牢记)这里我选择默认目录,点击下一步 这里弹出警告,直接点击yes 直接点击exe ...

  3. IDEA:配置Tomcat并运行应用

    1.File->ProjectStructre->Artifacts 如下界面 3.下一步:如图所示 4.选择相应的Module就行 5.第一次运行程序时最好选择运行的配置,否则可能运行的 ...

  4. tf.lin_space

    .lin_spae{ start, stop, num, name=None } start:张量(float32,或者float64类型) stop:张量(和start相同) num:张量(int3 ...

  5. fatal error C1045: 编译器限制 : 链接规范嵌套太深

    前言 我相信你是遇到了同样的问题.通过搜索引擎来到这里的.为了不耽误排查问题的时间,我提前说明一下这篇文章所描述的问题范畴: 我遇到的问题和 c++ 模板相关: 如果我减少传递的参数的话,是有可能避免 ...

  6. 【C++】《C++ Primer 》第十四章

    第十四章 重载运算与类型转换 一.基本概念 重载运算符是具有特殊名字的函数:由关键字operator和其后要定义的运算符号共同组成.也包含返回类型.参数列表以及函数体. 当一个重载的运算符是成员函数时 ...

  7. 【Linux】make编译的小技巧

    ------------------------------------------------------------------------------------------------- | ...

  8. 【Oracle】delete表后commit后怎么找回,方法

    有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦 下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据 模拟实验环境: 创建一个新表 SQL> c ...

  9. kubernets之节点和网络的安全保障策略

    一  在pod中使用宿主节点的命名空间 1.1  在pod中使用宿主的网络命名空间 [root@node01 Chapter13]# cat pod-with-host-network.yml api ...

  10. 敏感信息泄露 - Pikachu

    概述: 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如:---通过访问url下的目录,可以直接列出目录下的文件列表;---输入错误的url参数后报错信息里面包含 ...