微服务项目名称 项目微服务中的角色
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. Java串口编程例子

    最近笔者接触到串口编程,网上搜了些资料,顺便整理一下.网上都在推荐使用Java RXTX开源类库,它提供了Windows.Linux等不同操作系统下的串口和并口通信实现,遵循GNU LGPL协议.看起 ...

  2. G客短信平台开发,资源短信功能使用说明

    短信平台使用资源短信操作顺序  联系微信:290615413 1:登录客户端 2:点击左侧 发送短信中的,资源短信 3:资源短信申请操作 3.1:选择相应的省市 会显示资源数量. 3.2:然后输入申请 ...

  3. 商品类型的下拉框绑定一个事件,通过ajax获取属性

    html代码这么写 <!-- 商品属性 --> <table cellspacing="1" cellpadding="3" width=&q ...

  4. go语言中运算符

    Go语言学习笔记(运算符)-day01 go语言中与其他语言一样,存在多种运算符,下表列出了go语言中的运算符类型 算数运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 ...

  5. Redis必知必会系列

    1.常用命令 https://www.cnblogs.com/huozhonghun/p/11636053.html 2.Redis是什么 Redis 是 C 语言开发的一个开源的(遵从 BSD 协议 ...

  6. 【C++】《C++ Primer 》第六章

    第六章 函数 一.函数基础 函数定义:包括返回类型.函数名字和0个或者多个形参(parameter)组成的列表和函数体. 调用运算符:调用运算符的形式是一对圆括号 (),作用于一个表达式,该表达式是函 ...

  7. 获取json格式的数据变成了undefined!?

    今天在做一个简单的登陆功能时,当一切准备就绪,点击登陆时,什么都没发生..然后开始debug,打断点调试,然后发现了这个.向页面传递数据flag是true代表该用户的账号密码验证码等信息正确可以登录, ...

  8. mmall商城购物车模块总结

    购物车模块的设计思想 购物车的实现方式有很多,但是最常见的就三种:Cookie,Session,数据库.三种方法各有优劣,适合的场景各不相同.Cookie方法:通过把购物车中的商品数据写入Cookie ...

  9. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  10. .NET 5 程序高级调试-WinDbg

    上周和大家分享了.NET 5开源工作流框架elsa,程序跑起来后,想看一下后台线程的执行情况.抓了个进程Dump后,使用WinDbg调试,加载SOS调试器扩展,结果无法正常使用了: 0:000> ...