当前位置: 首页 > news >正文

武城网站建设价格寻找设计师的网站

武城网站建设价格,寻找设计师的网站,网站建设方案书原件,wordpress仿模版文章目录 DockerSpring Boot和Buildpacks在Docker中运行系统Docker化微服务Docker化前端Docker化配置导入器Docker Compose使用Docker扩展系统共享Docker镜像小结 前面的文章#xff1a; 1、1 一个测试驱动的Spring Boot应用程序开发 2、2 使用React构造前端应用 3、3 试驱动的… 文章目录 DockerSpring Boot和Buildpacks在Docker中运行系统Docker化微服务Docker化前端Docker化配置导入器Docker Compose使用Docker扩展系统共享Docker镜像小结 前面的文章 1、1 一个测试驱动的Spring Boot应用程序开发 2、2 使用React构造前端应用 3、3 试驱动的Spring Boot应用程序开发数据层示例 4、4 向微服务架构转变 5、5 转向事件驱动的架构 6、6 网关和配置服务器 7、7 集中式日志和分布式跟踪 代码下载 前面的微服务都是在本地环境下执行的包括微服务、RabbitMQ、Consul、前端等需要安装JDK、相关的服务器等随着架构的发展可能需要引入其他工具和服务这些工具和服务有自己的安装过程具体取决于操作系统及其版本。 总体而言想在各种环境中运行后端系统无论是什么OS版本理想情况下希望能受益于“一次构建随处部署”策略并避免在所部署系统的每种环境中重复执行所有配置和安装步骤而且部署尽可能简单。 原来打包系统的一种方法是创建虚拟机VM。有几种创建和运行虚拟机的解决方案称为虚拟机监控程序。其优点是一台管理机可以同时运行多个VM共享硬件资源每个VM都需要自己的操作系统然后通过该监控程序将其连接到主机的CPU、RAM和硬盘等。 这个方案中可以从Linux发行版开始创建一个VM并在其中设置和安装运行系统所需的工作和服务Consul、RabbitMQ、Java运行时、JAR应用程序等。一旦虚拟机正常工作就可以将其转移到运行了虚拟机监控程序的其他任何计算机上。其层次结构如图所示 #mermaid-svg-umLaLgpTmVOoIQYy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-umLaLgpTmVOoIQYy .error-icon{fill:#552222;}#mermaid-svg-umLaLgpTmVOoIQYy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-umLaLgpTmVOoIQYy .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-umLaLgpTmVOoIQYy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-umLaLgpTmVOoIQYy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-umLaLgpTmVOoIQYy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-umLaLgpTmVOoIQYy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-umLaLgpTmVOoIQYy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-umLaLgpTmVOoIQYy .marker.cross{stroke:#333333;}#mermaid-svg-umLaLgpTmVOoIQYy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-umLaLgpTmVOoIQYy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-umLaLgpTmVOoIQYy .cluster-label text{fill:#333;}#mermaid-svg-umLaLgpTmVOoIQYy .cluster-label span{color:#333;}#mermaid-svg-umLaLgpTmVOoIQYy .label text,#mermaid-svg-umLaLgpTmVOoIQYy span{fill:#333;color:#333;}#mermaid-svg-umLaLgpTmVOoIQYy .node rect,#mermaid-svg-umLaLgpTmVOoIQYy .node circle,#mermaid-svg-umLaLgpTmVOoIQYy .node ellipse,#mermaid-svg-umLaLgpTmVOoIQYy .node polygon,#mermaid-svg-umLaLgpTmVOoIQYy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-umLaLgpTmVOoIQYy .node .label{text-align:center;}#mermaid-svg-umLaLgpTmVOoIQYy .node.clickable{cursor:pointer;}#mermaid-svg-umLaLgpTmVOoIQYy .arrowheadPath{fill:#333333;}#mermaid-svg-umLaLgpTmVOoIQYy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-umLaLgpTmVOoIQYy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-umLaLgpTmVOoIQYy .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-umLaLgpTmVOoIQYy .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-umLaLgpTmVOoIQYy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-umLaLgpTmVOoIQYy .cluster text{fill:#333;}#mermaid-svg-umLaLgpTmVOoIQYy .cluster span{color:#333;}#mermaid-svg-umLaLgpTmVOoIQYy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-umLaLgpTmVOoIQYy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 虚拟机 Gateway Consul RabbitMQ Multiplication Gamification Logs Linux OS安装了Java 虚拟机监控程序 主机的操作系统如果运行裸机监控程序则不需要 主机的硬件 但是将所有程序放到一个虚拟机中并不灵活如果要扩展则必须进入虚拟机添加新实例并确保分配更多CPU、内存等需要了解所有组件的工作原理部署过程不再那么容易。 更动态的方法是为每个服务和工具配备独立的虚拟机然后添加一些网络配置确保它们可以互相连接。由于使用服务发现和动态扩展可以添加更多运行了微服务的虚拟机实例并透明地使用。这些新实例只要使用其地址在Consul中注册即可。层次结构如图所示。这比单个VM更好但考虑到每个虚拟机都需要自己的操作系统会浪费大量资源而且在虚拟机编排方面带来很多挑战监视、创建新实例、配置网络、存储等。 #mermaid-svg-OW1Wqbme9ymoepVN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OW1Wqbme9ymoepVN .error-icon{fill:#552222;}#mermaid-svg-OW1Wqbme9ymoepVN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OW1Wqbme9ymoepVN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-OW1Wqbme9ymoepVN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OW1Wqbme9ymoepVN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OW1Wqbme9ymoepVN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OW1Wqbme9ymoepVN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OW1Wqbme9ymoepVN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OW1Wqbme9ymoepVN .marker.cross{stroke:#333333;}#mermaid-svg-OW1Wqbme9ymoepVN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OW1Wqbme9ymoepVN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OW1Wqbme9ymoepVN .cluster-label text{fill:#333;}#mermaid-svg-OW1Wqbme9ymoepVN .cluster-label span{color:#333;}#mermaid-svg-OW1Wqbme9ymoepVN .label text,#mermaid-svg-OW1Wqbme9ymoepVN span{fill:#333;color:#333;}#mermaid-svg-OW1Wqbme9ymoepVN .node rect,#mermaid-svg-OW1Wqbme9ymoepVN .node circle,#mermaid-svg-OW1Wqbme9ymoepVN .node ellipse,#mermaid-svg-OW1Wqbme9ymoepVN .node polygon,#mermaid-svg-OW1Wqbme9ymoepVN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OW1Wqbme9ymoepVN .node .label{text-align:center;}#mermaid-svg-OW1Wqbme9ymoepVN .node.clickable{cursor:pointer;}#mermaid-svg-OW1Wqbme9ymoepVN .arrowheadPath{fill:#333333;}#mermaid-svg-OW1Wqbme9ymoepVN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OW1Wqbme9ymoepVN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OW1Wqbme9ymoepVN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-OW1Wqbme9ymoepVN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-OW1Wqbme9ymoepVN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OW1Wqbme9ymoepVN .cluster text{fill:#333;}#mermaid-svg-OW1Wqbme9ymoepVN .cluster span{color:#333;}#mermaid-svg-OW1Wqbme9ymoepVN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OW1Wqbme9ymoepVN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 虚拟机 VM Logs Linux VM RabbitMQ Linux VM Consul Linux VM Multiplication Linux VM Gamification Linux VM Gateway Linux 虚拟机监控程序 主机的操作系统如果运行裸机监控程序则不需要 主机的硬件 随着虚拟化技术的发展虚拟机已经被废弃了容器成为主流的应用程序虚拟化方式。因为容器不需要安装操作系统体积要小得多占用资源也更少。另外像Docker这样的容器化平台大大简化了云和本地部署并提供易于使用的工具来打包应用程序将它们作为容器运行并在公共注册表中共享。 Docker 容器在业界存在很多年了但Docker的流行使容器重焕光彩因此许多容器的定义和观点都是从Docker的架构中产生的。Docker实在太流行了以至于容器化也称为Docker化。Docker是一个基于Linux内核的、构建、传输和运行轻量级容器的平台。Docker默认支持Linux平台。借助在Virtual Box之上运行的Boot2Docker, Docker也支持Mac和Windows平台。亚马逊的EC2 Container ServiceECS默认支持在AWS EC2实例上运行Docker。Docker可以安装在裸机上也可以安装在传统的虚拟机上比如VMWare或Hyper-V。 在Docker中可将应用程序及其可能需要的任何支持组件打包为映像image这些映像可以基于从Docker注册表中提取的其他现有映像可以重复使用并节省时间映像的官方注册表是Docker Hub。例如Multiplication微服务的映像可以基于JDK 21映像然后可在其上添加Spring Boot打包的JAR文件。要创建一个映像需要编写一个Dockerfile文件其中包含Docker CLI工具命令。Multiplication微服务的Dockerfile文件如下所示 FROM openjdk:21 COPY ./target/multiplication-0.0.1-SNAPSHOT.jar z:/_Docker/multiplication WORKDIR z:/_Docker/multiplication EXPOSE 8080 ENTRYPOINT [java, -jar, multiplication-0.0.1-SNAPSHOT.jar]这些命令告诉Docker使用官方映像opendjk的21版为基础然后将可分发的.jar文件复制到文件夹z:/_Docker/multiplication接着设置工作目录为拷贝到的目标文件夹z:/_Docker/multiplication再使用EXPOSE开放8080端口来提供REST API访问最后通过ENTRYPOINT运行命令启动服务。 注意这里使用Windows下的Docker所以目录是Windows的访问方式Linux下使用Docker更方便。 要构建映像必须使用Docker CLI工具该工具随标准Docker安装包一起提供安装了Docker工具后通常就可以使用。在使用Dockerfile文件构建映像时有一个前提就是要生成./target/multiplication-0.0.1-SNAPSHOT.jar文件可以使用maven来生成命令如./mvnw clean package。有了基础就可以执行构建命令了过程如下所示 docker build -t multiplication:1.0.0 . [] Building 17.3s (8/8) FINISHED docker:default [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 236B 0.0s [internal] load metadata for docker.io/library/openjdk:21 16.9s [internal] load build context 0.0s transferring context: 90B 0.0s CACHED [1/3] FROM docker.io/library/openjdk:21sha256:af9de795d1f8d3b6172f6c55ca9ba1c5768baa11bb2dc8af7045c7db9d4c33ac 0.0s [2/3] COPY ./target/multiplication-0.0.1-SNAPSHOT.jar /usr/src/multiplication/ 0.1s [3/3] WORKDIR /usr/src/multiplication/ 0.0s exporting to image 0.2s exporting layers 0.2s writing image sha256:ee85066623658180d950aff3c53a15df0a998232b3c0ddbc07153a216e223121 0.0s naming to docker.io/library/multiplication:1.0.0 0.0s 使用docker images命令就可以看到映像已经创建如下所示 docker images REPOSITORY TAG IMAGE ID CREATED SIZE multiplication 1.0.0 ee8506662365 2 minutes ago 571MB ...构建映像后就可以在本地使用了可将其作为容器运行该容器是映像的运行实例运行容器的命令如下所示 docker run -it -p 18080:8080 multiplication:1.0.0如果本地镜像不可用Docker的run命令会从服务器获取镜像如果服务器存在该镜像并运行。当容器执行时这个容器无法正常执行查看日志可以看到如下错误 2023-12-27 11:59:21 2023-12-27T03:59:21.268Z ERROR 1 --- [multiplication] [ main] [ ] o.s.c.c.s.ConsulServiceRegistry : Error registering service with consul: NewService{idmultiplication, namemultiplication, tags[], address6732d0548338, meta{securefalse}, port8080, enableTagOverridenull, checkCheck{scriptnull, dockerContainerIDnull, shellnull, interval10s, ttlnull, httphttp://6732d0548338:8080/actuator/health, methodnull, header{}, tcpnull, timeoutnull, deregisterCriticalServiceAfternull, tlsSkipVerifynull, statusnull, grpcnull, grpcUseTLSnull}, checksnull} 2023-12-27 11:59:21 2023-12-27 11:59:25 2023-12-27T03:59:25.918Z ERROR 1 --- [multiplication] [ main] [ ] o.s.c.c.s.ConsulServiceRegistry : Error registering service with consul: NewService{idmultiplication, namemultiplication, tags[], address6732d0548338, meta{securefalse}, port8080, enableTagOverridenull, checkCheck{scriptnull, dockerContainerIDnull, shellnull, interval10s, ttlnull, httphttp://6732d0548338:8080/actuator/health, methodnull, header{}, tcpnull, timeoutnull, deregisterCriticalServiceAfternull, tlsSkipVerifynull, statusnull, grpcnull, grpcUseTLSnull}, checksnull} 2023-12-27 11:59:25 2023-12-27 11:59:25 com.ecwid.consul.transport.TransportException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Connection refused因为容器无法正常连接Consul和RabbitMQ默认情况下Spring Boot会与Consul一样尝试在localhost上查找RabbitMQ主机。在容器中localhost指容器自己而不是其他要想正确设置后端系统在Docker中运行必须将RabbitMQ和Consul部署为容器并使用Docker网络将其连接起来层次结构如图所示 #mermaid-svg-uaLkxROgZxsDbJda {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uaLkxROgZxsDbJda .error-icon{fill:#552222;}#mermaid-svg-uaLkxROgZxsDbJda .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uaLkxROgZxsDbJda .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-uaLkxROgZxsDbJda .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uaLkxROgZxsDbJda .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uaLkxROgZxsDbJda .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uaLkxROgZxsDbJda .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uaLkxROgZxsDbJda .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uaLkxROgZxsDbJda .marker.cross{stroke:#333333;}#mermaid-svg-uaLkxROgZxsDbJda svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uaLkxROgZxsDbJda .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uaLkxROgZxsDbJda .cluster-label text{fill:#333;}#mermaid-svg-uaLkxROgZxsDbJda .cluster-label span{color:#333;}#mermaid-svg-uaLkxROgZxsDbJda .label text,#mermaid-svg-uaLkxROgZxsDbJda span{fill:#333;color:#333;}#mermaid-svg-uaLkxROgZxsDbJda .node rect,#mermaid-svg-uaLkxROgZxsDbJda .node circle,#mermaid-svg-uaLkxROgZxsDbJda .node ellipse,#mermaid-svg-uaLkxROgZxsDbJda .node polygon,#mermaid-svg-uaLkxROgZxsDbJda .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uaLkxROgZxsDbJda .node .label{text-align:center;}#mermaid-svg-uaLkxROgZxsDbJda .node.clickable{cursor:pointer;}#mermaid-svg-uaLkxROgZxsDbJda .arrowheadPath{fill:#333333;}#mermaid-svg-uaLkxROgZxsDbJda .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uaLkxROgZxsDbJda .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uaLkxROgZxsDbJda .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-uaLkxROgZxsDbJda .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-uaLkxROgZxsDbJda .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uaLkxROgZxsDbJda .cluster text{fill:#333;}#mermaid-svg-uaLkxROgZxsDbJda .cluster span{color:#333;}#mermaid-svg-uaLkxROgZxsDbJda div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-uaLkxROgZxsDbJda :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 虚拟机 容器 Logs 容器 RabbitMQ 容器 Consul 容器 Multiplication 容器 Gamification 容器 Gateway Docker 主机的操作系统如果运行裸机监控程序则不需要 主机的硬件 下面就来看看Spring Boot如何构建Docker映像这样就不需要自己创建Dockerfile了。 Spring Boot和Buildpacks Spring Boot支持云原生的Buildpacks来构建Open Container InitiativeOCI镜像旨在帮助打包应用程序以将其部署到任何云提供商的项目可在Docker和其他容器平台中运行生成的镜像。 Buildpacks插件可以基于项目的Maven配置准备一个计划然后打包一个准备部署的Docker镜像此外以某种方式将镜像分层组织以便未来的应用程序版本甚至使用该工具构建的其他微服务镜像例如包含所有Spring Boot核心库的层都可以重用有助于快速测试和部署。 如果从命令行运行build-image目标就可以看到Buildpacks在执行 ./mvnw spring-boot:build-image 在Gamification项目文件夹下执行上述命令就可以看到相应的构建镜像的日志如果一切顺利可以在最后看到如下日志 [INFO] Building image docker.io/library/gamification:0.0.1-SNAPSHOT ... Docker标记设置为pom.xml文件gamification:0.0.1-SNAPSHOT中指定的Maven工件的名称和版本docker.io/library/是所有公共Docker镜像的默认值也可以自定义选项。 可以像前面执行镜像一样运行容器命令如下 docker run -it -p 18081:8081 gamification:0.0.1-SNAPSHOT类似地会出现相同的错误应用程序无法连接到RabbitMQ和Consul它们需要两种服务。 如果想完全控制要构建的内容以及要包含在镜像中的工具和文件最后自定义Dockerfile命令这并不难。 在Docker中运行系统 现在将系统的每个组件构建或找到一个Docker镜像以便进行容器化部署 Multiplication、Gamification、Gateway和Logs微服务将使用Spring Boot的Maven插件和Buildpacks来生成这些Docker镜像。RabbitMQ前面就已经使用Docker来部署了。Consul前面也采用了Docker的镜像来提供服务了。前端如果想在Docker中部署整个系统还需要Web服务器来托管React构建生成的HTML/Javascript文件。可以使用Nginx这样的轻量级静态服务器使用Docker官方镜像。 整个系统计划6个不同的Docker镜像并使用两个公共的Docker镜像如下所示 #mermaid-svg-ZTHAWJqzkUMDCeTw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .error-icon{fill:#552222;}#mermaid-svg-ZTHAWJqzkUMDCeTw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZTHAWJqzkUMDCeTw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .marker.cross{stroke:#333333;}#mermaid-svg-ZTHAWJqzkUMDCeTw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZTHAWJqzkUMDCeTw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .cluster-label text{fill:#333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .cluster-label span{color:#333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .label text,#mermaid-svg-ZTHAWJqzkUMDCeTw span{fill:#333;color:#333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .node rect,#mermaid-svg-ZTHAWJqzkUMDCeTw .node circle,#mermaid-svg-ZTHAWJqzkUMDCeTw .node ellipse,#mermaid-svg-ZTHAWJqzkUMDCeTw .node polygon,#mermaid-svg-ZTHAWJqzkUMDCeTw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZTHAWJqzkUMDCeTw .node .label{text-align:center;}#mermaid-svg-ZTHAWJqzkUMDCeTw .node.clickable{cursor:pointer;}#mermaid-svg-ZTHAWJqzkUMDCeTw .arrowheadPath{fill:#333333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZTHAWJqzkUMDCeTw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ZTHAWJqzkUMDCeTw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ZTHAWJqzkUMDCeTw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZTHAWJqzkUMDCeTw .cluster text{fill:#333;}#mermaid-svg-ZTHAWJqzkUMDCeTw .cluster span{color:#333;}#mermaid-svg-ZTHAWJqzkUMDCeTw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZTHAWJqzkUMDCeTw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} REST API调用8000 获取HTML/JS3000 Consul的配置导入器 consul-importer:1.0(based consul:1.11.1) 集中式日志 logs:0.0.1(Buildpacks) Consul consul:1.11.1 RabbitMQ rabbitmq:3-management Gamification gamification:0.0.1(Buildpacks) Multiplication multiplication:0.0.1(Buildpacks) 前端的Web服务器 challenge-frontend:1.0(based on nginx:1.21.5) 网关 gateway:0.0.1(Buildpacks) 浏览器 Docker化微服务 首先为Spring Boot应用程序构建所有镜像在每个项目文件夹下执行以下命令 ./mvnw spring-boot:build-imageDocker化前端 在前端项目创建一个Dockerfile文件只要两条命令指定基本的nginx镜像将build文件夹复制到容器目录下如下所示 FROM nginx:1.25.3 COPY build /usr/share/nginx/html在创建Docker镜像前先执行npm run build命令编译React项目生成build文件夹就可以创建Docker镜像了命令如下 docker build -t challenge-frontend:1.0 .Docker化配置导入器 还需要一个Docker镜像来加载预定义的集中式配置已经有一个运行服务器的Consul容器通过运行一个额外的容器来执行Consul CLI来加载一些KV数据一个Docker配置文件。这样可以在Docker中运行微服务时使用预加载的配置文件配置因为需要不同的RabbitMQ参数。 想要在文件中加载配置可在本地Consul服务器中创建该配置然后通过CLI命令将其导出。使用UI创建config根目录并创建一个名为defaults,docker的子文件夹。在内部创建一个名为application.yml的键其配置如下所示 spring:rabbitmq:host: rabbitmqcloud:consul:discovery:instance-id: ${spring.application.name}-${random.int(1000)}该配置执行如下操作 将RabbitMQ主机设为rabbitmq覆盖默认的localhost要确保消息代理的容器在该地址可用。覆盖分配给正在运行的服务的实例标识符以在服务注册表中使用。默认的Spring Consul配置将应用程序名称与端口号连接在一起该方法对容器无效。在Docker中运行同一服务的多个实例时都使用相同的内部端口因此会有相同的标识符。为解决这个问题可使用随机数为后缀。 下图显示了Consul用户界面添加的配置 然后将配置导出到文件可在Consul终端执行如下命令 consul kv export config/ consul-kv-docker.json文件内容如下 [{key: config/,flags: 0,value: },{key: config/defaults,docker/application.yml,flags: 0,value: c3ByaW5nOgogIHJhYmJpdG1xOgogICAgaG9zdDogcmFiYml0bXEKICBjbG91ZDoKICAgIGNvbnN1bDoKICAgICAgZGlzY292ZXJ5OgogICAgICAgIGluc3RhbmNlLWlkOiAke3NwcmluZy5hcHBsaWNhdGlvbi5uYW1lfS0ke3JhbmRvbS5pbnQoMTAwMCl9} ]现在需要创建一个docker文件夹存放Dockerfile文件以及所导出的json配置便于创建Docker镜像Dockerfile如下 FROM consul:1.11.1 COPY ./consul-kv-docker.json /usr/src/consul/ WORKDIR /usr/src/consul ENV CONSUL_HTTP_ADDRconsul:8500 ENTRYPOINT until consul kv import consul-kv-docker.json; do echo 正在启动 Consul; sleep 2; done这个镜像使用Consul为基础将json文件复制到镜像内部并将工作目录设置为与文件相同然后使用ENV命令设置环境变量以使用远程主机访问服务器这里是consul:8500最后是一个内联的shell脚本遵循until … done模式直到运行命令成功为止两次尝试之间的间隔为2秒主命令是consul kv import consul-kv-docker.json将文件内容导入KV存储器需要循环执行因为此时Consul服务器可能尚未启动。 现在就可用构建容器了 docker build -t consul-importer:1.0 .Docker Compose 构建完所有镜像后需要将系统作为一组容器运行下面就来看看然后启动这些容器并通信。 可使用单个Docker命令来启动所有必需的容器并设置网络以使它们彼此连接但是如果要告诉其他人如何启动系统需要向其传递包含所有这些命令和说明的脚本或文档。Docker有更好的方法可用对容器配置和部署指令进行分组Docker Compose。 通过Compose使用YAML文件来定义基于多个容器的应用程序然后使用命令docker-compose来运行所有服务。需要创建一个docker-compose.yml配置文件下面给出了RabbitMQ和Consul的配置 version: 3services:consul-dev:image: consul:latestcontainer_name: d_consulports:- 8500:8500- 8600:8600/udpcommand: agent -dev -nodelearnmicro -client0.0.0.0 -log-levelINFOnetworks:- microservicesrabbitmq-dev:image: rabbitmq:managementcontainer_name: d_rabbitmqports:- 5672:5672- 15672:15672networks:- microservicesnetworks:microservices:driver: bridge这里定义了两个服务consul-dev和rabbitmq-dev可以用任何名称-dev后缀表明都在开发模式下运行没有集群的独立节点。这两个服务使用的是没有创建的Docker容器使用Docker Hub中的公共镜像。container_name指定了容器名称其他容器可以通过名称来找到它这意味着应用程序可以使用地址d_rabbitmq:5672而不是默认的localhost:5672连接到RabbitMQ服务器。一旦指定了名称就无法将服务扩展到多个容器了。 这里还定义了一个类型为bridge的网络名称为microservices驱动程序的类型为默认类型用于连接独立的容器。然后在每个服务定义中使用参数networks将microservices网络设置为可以访问的网络这意味着这些服务可以互相连接因为它们属于同一网络。Docker网络与主机网络是隔离的除了使用ports参数显示公开的服务之外无法访问任何服务。 现在使用这个docker-compose.yml文件来运行Consul和RabbitMQ容器需要执行命令 docker-compose upDocker Compose会自动获取docker-compose.yml而不指定名称这是默认文件名所有容器的输出都会附加到当前终端和容器。如果要在后台将其作为守护进程只需要在命令中添加-d标志即可。执行命令后可以看到如下日志 docker-compose up [] Running 3/0✔ Network docker_microservices Created 0.0s✔ Container d_rabbitmq Created 0.0s✔ Container d_consul Created 0.0s Attaching to d_consul, d_rabbitmq d_consul | Starting Consul agent... d_consul | Version: 1.11.1 d_consul | Node ID: daa7c4ae-b987-1916-d574-b5bf8522fd81 d_consul | Node name: learnmicro d_consul | Datacenter: dc1 (Segment: all) d_consul | Server: true (Bootstrap: false) d_consul | Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600) d_consul | Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) d_consul | Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false d_consul | d_consul | Log data will now stream in as it occurs: d_consul | d_consul | 2023-12-30T08:00:35.265Z [INFO] agent.server.raft: initial configuration: index1 servers[{Suffrage:Voter ID:daa7c4ae-b987-1916-d574-b5bf8522fd81 Address:127.0.0.1:8300}] d_consul | 2023-12-30T08:00:35.265Z [INFO] agent.server.raft: entering follower state: followerNode at 127.0.0.1:8300 [Follower] leader d_consul | 2023-12-30T08:00:35.266Z [INFO] agent.server.serf.wan: serf: EventMemberJoin: learnmicro.dc1 127.0.0.1 d_consul | 2023-12-30T08:00:35.266Z [INFO] agent.server.serf.lan: serf: EventMemberJoin: learnmicro 127.0.0.1 d_consul | 2023-12-30T08:00:35.266Z [INFO] agent.router: Initializing LAN area manager d_consul | 2023-12-30T08:00:35.266Z [INFO] agent.server: Adding LAN server: serverlearnmicro (Addr: tcp/127.0.0.1:8300) (DC: dc1) d_consul | 2023-12-30T08:00:35.266Z [INFO] agent.server: Handled event for server in area: eventmember-join serverlearnmicro.dc1 areawan d_consul | 2023-12-30T08:00:35.266Z [WARN] agent: grpc: addrConn.createTransport failed to connect to {dc1-127.0.0.1:8300 0 learnmicro.dc1 nil}. Err :connection error: desc transport: Error while dialing dial tcp 127.0.0.1:0-127.0.0.1:8300: operation was canceled. Reconnecting... d_consul | 2023-12-30T08:00:35.266Z [INFO] agent: Started DNS server: address0.0.0.0:8600 networktcp d_consul | 2023-12-30T08:00:35.266Z [INFO] agent: Started DNS server: address0.0.0.0:8600 networkudp d_consul | 2023-12-30T08:00:35.267Z [INFO] agent: Starting server: address[::]:8500 networktcp protocolhttp d_consul | 2023-12-30T08:00:35.267Z [WARN] agent: DEPRECATED Backwards compatibility with pre-1.9 metrics enabled. These metrics will be removed in a future version of Consul. Set telemetry { disable_compat_1.9 true } to disable them. d_consul | 2023-12-30T08:00:35.267Z [INFO] agent: Started gRPC server: address[::]:8502 networktcp d_consul | 2023-12-30T08:00:35.267Z [INFO] agent: started state syncer d_consul | 2023-12-30T08:00:35.267Z [INFO] agent: Consul agent running! d_consul | 2023-12-30T08:00:35.334Z [WARN] agent.server.raft: heartbeat timeout reached, starting election: last-leader d_consul | 2023-12-30T08:00:35.334Z [INFO] agent.server.raft: entering candidate state: nodeNode at 127.0.0.1:8300 [Candidate] term2 d_consul | 2023-12-30T08:00:35.334Z [INFO] agent.server.raft: election won: tally1 d_consul | 2023-12-30T08:00:35.334Z [INFO] agent.server.raft: entering leader state: leaderNode at 127.0.0.1:8300 [Leader] d_consul | 2023-12-30T08:00:35.334Z [INFO] agent.server: cluster leadership acquired d_consul | 2023-12-30T08:00:35.334Z [INFO] agent.server: New leader elected: payloadlearnmicro d_consul | 2023-12-30T08:00:35.335Z [INFO] agent.leader: started routine: routinefederation state anti-entropy d_consul | 2023-12-30T08:00:35.335Z [INFO] agent.leader: started routine: routinefederation state pruning d_consul | 2023-12-30T08:00:35.336Z [INFO] connect.ca: initialized primary datacenter CA with provider: providerconsul d_consul | 2023-12-30T08:00:35.336Z [INFO] agent.leader: started routine: routineintermediate cert renew watch d_consul | 2023-12-30T08:00:35.336Z [INFO] agent.leader: started routine: routineCA root pruning d_consul | 2023-12-30T08:00:35.336Z [INFO] agent.leader: started routine: routineCA root expiration metric d_consul | 2023-12-30T08:00:35.336Z [INFO] agent.leader: started routine: routineCA signing expiration metric d_consul | 2023-12-30T08:00:35.336Z [INFO] agent.leader: started routine: routinevirtual IP version check d_consul | 2023-12-30T08:00:35.336Z [INFO] agent.server: member joined, marking health alive: memberlearnmicro partitiondefault d_consul | 2023-12-30T08:00:35.357Z [INFO] agent: Synced node info d_consul | 2023-12-30T08:00:35.736Z [INFO] agent.server: federation state anti-entropy synced d_rabbitmq | 2023-12-30 08:00:36.81674800:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:36.82506400:00 [info] 0.222.0 Feature flags: [ ] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:36.82509300:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:36.82510300:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:36.82511500:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:36.82512500:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:36.82513200:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:36.82514000:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:37.04404200:00 [noti] 0.44.0 Application syslog exited with reason: stopped d_rabbitmq | 2023-12-30 08:00:37.04411000:00 [noti] 0.222.0 Logging: switching to configured handler(s); following messages may not be visible in this log output d_rabbitmq | 2023-12-30 08:00:37.05363600:00 [noti] 0.222.0 Logging: configured log handlers are now ACTIVE d_rabbitmq | 2023-12-30 08:00:37.17959100:00 [info] 0.222.0 ra: starting system quorum_queues d_rabbitmq | 2023-12-30 08:00:37.17969700:00 [info] 0.222.0 starting Ra system: quorum_queues in directory: /var/lib/rabbitmq/mnesia/rabbit892990533f7a/quorum/rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:37.22827100:00 [info] 0.259.0 ra: meta data store initialised for system quorum_queues. 0 record(s) recovered d_rabbitmq | 2023-12-30 08:00:37.23735500:00 [noti] 0.264.0 WAL: ra_log_wal init, open tbls: ra_log_open_mem_tables, closed tbls: ra_log_closed_mem_tables d_rabbitmq | 2023-12-30 08:00:37.24248500:00 [info] 0.222.0 ra: starting system coordination d_rabbitmq | 2023-12-30 08:00:37.24251200:00 [info] 0.222.0 starting Ra system: coordination in directory: /var/lib/rabbitmq/mnesia/rabbit892990533f7a/coordination/rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:37.24406000:00 [info] 0.272.0 ra: meta data store initialised for system coordination. 0 record(s) recovered d_rabbitmq | 2023-12-30 08:00:37.24420900:00 [noti] 0.277.0 WAL: ra_coordination_log_wal init, open tbls: ra_coordination_log_open_mem_tables, closed tbls: ra_coordination_log_closed_mem_tables d_rabbitmq | 2023-12-30 08:00:37.24700500:00 [info] 0.222.0 d_rabbitmq | 2023-12-30 08:00:37.24700500:00 [info] 0.222.0 Starting RabbitMQ 3.9.11 on Erlang 24.2 [jit] d_rabbitmq | 2023-12-30 08:00:37.24700500:00 [info] 0.222.0 Copyright (c) 2007-2021 VMware, Inc. or its affiliates. d_rabbitmq | 2023-12-30 08:00:37.24700500:00 [info] 0.222.0 Licensed under the MPL 2.0. Website: https://rabbitmq.com d_rabbitmq | d_rabbitmq | ## ## RabbitMQ 3.9.11 d_rabbitmq | ## ## d_rabbitmq | ########## Copyright (c) 2007-2021 VMware, Inc. or its affiliates. d_rabbitmq | ###### ## d_rabbitmq | ########## Licensed under the MPL 2.0. Website: https://rabbitmq.com d_rabbitmq | d_rabbitmq | Erlang: 24.2 [jit] d_rabbitmq | TLS Library: OpenSSL - OpenSSL 1.1.1m 14 Dec 2021 d_rabbitmq | d_rabbitmq | Doc guides: https://rabbitmq.com/documentation.html d_rabbitmq | Support: https://rabbitmq.com/contact.html d_rabbitmq | Tutorials: https://rabbitmq.com/getstarted.html d_rabbitmq | Monitoring: https://rabbitmq.com/monitoring.html d_rabbitmq | d_rabbitmq | Logs: /var/log/rabbitmq/rabbit892990533f7a_upgrade.log d_rabbitmq | stdout d_rabbitmq | d_rabbitmq | Config file(s): /etc/rabbitmq/conf.d/10-default-guest-user.conf d_rabbitmq | d_rabbitmq | Starting broker...2023-12-30 08:00:37.24778400:00 [info] 0.222.0 d_rabbitmq | 2023-12-30 08:00:37.24778400:00 [info] 0.222.0 node : rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:37.24778400:00 [info] 0.222.0 home dir : /var/lib/rabbitmq d_rabbitmq | 2023-12-30 08:00:37.24778400:00 [info] 0.222.0 config file(s) : /etc/rabbitmq/conf.d/10-default-guest-user.conf d_rabbitmq | 2023-12-30 08:00:37.24778400:00 [info] 0.222.0 cookie hash : dw5XV6bWOUm3unVnJBRhw d_rabbitmq | 2023-12-30 08:00:37.24778400:00 [info] 0.222.0 log(s) : /var/log/rabbitmq/rabbit892990533f7a_upgrade.log d_rabbitmq | 2023-12-30 08:00:37.24778400:00 [info] 0.222.0 : stdout d_rabbitmq | 2023-12-30 08:00:37.24778400:00 [info] 0.222.0 database dir : /var/lib/rabbitmq/mnesia/rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:37.38427600:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:37.38434200:00 [info] 0.222.0 Feature flags: [ ] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:37.38435500:00 [info] 0.222.0 Feature flags: [ ] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:37.38436500:00 [info] 0.222.0 Feature flags: [ ] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:37.38439500:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:37.38440500:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:37.38441200:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:37.38442000:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:37.38445800:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:37.38448300:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.00435900:00 [info] 0.222.0 Running boot step pre_boot defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.00441800:00 [info] 0.222.0 Running boot step rabbit_global_counters defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.00481400:00 [info] 0.222.0 Running boot step rabbit_osiris_metrics defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.00489100:00 [info] 0.222.0 Running boot step rabbit_core_metrics defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.00548600:00 [info] 0.222.0 Running boot step rabbit_alarm defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.00800700:00 [info] 0.288.0 Memory high watermark set to 19256 MiB (20192341196 bytes) of 48142 MiB (50480852992 bytes) total d_rabbitmq | 2023-12-30 08:00:39.01038700:00 [info] 0.290.0 Enabling free disk space monitoring d_rabbitmq | 2023-12-30 08:00:39.01041800:00 [info] 0.290.0 Disk free limit set to 50MB d_rabbitmq | 2023-12-30 08:00:39.01226200:00 [info] 0.222.0 Running boot step code_server_cache defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.01233300:00 [info] 0.222.0 Running boot step file_handle_cache defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.01251400:00 [info] 0.293.0 Limiting to approx 1048479 file handles (943629 sockets) d_rabbitmq | 2023-12-30 08:00:39.01264200:00 [info] 0.294.0 FHC read buffering: OFF d_rabbitmq | 2023-12-30 08:00:39.01268600:00 [info] 0.294.0 FHC write buffering: ON d_rabbitmq | 2023-12-30 08:00:39.01305700:00 [info] 0.222.0 Running boot step worker_pool defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.01311200:00 [info] 0.279.0 Will use 16 processes for default worker pool d_rabbitmq | 2023-12-30 08:00:39.01312900:00 [info] 0.279.0 Starting worker pool worker_pool with 16 processes in it d_rabbitmq | 2023-12-30 08:00:39.01398900:00 [info] 0.222.0 Running boot step database defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.01423000:00 [info] 0.222.0 Node database directory at /var/lib/rabbitmq/mnesia/rabbit892990533f7a is empty. Assuming we need to join an existing cluster or initialise from scratch... d_rabbitmq | 2023-12-30 08:00:39.01428600:00 [info] 0.222.0 Configured peer discovery backend: rabbit_peer_discovery_classic_config d_rabbitmq | 2023-12-30 08:00:39.01430500:00 [info] 0.222.0 Will try to lock with peer discovery backend rabbit_peer_discovery_classic_config d_rabbitmq | 2023-12-30 08:00:39.01436600:00 [info] 0.222.0 All discovered existing cluster peers: d_rabbitmq | 2023-12-30 08:00:39.01440100:00 [info] 0.222.0 Discovered no peer nodes to cluster with. Some discovery backends can filter nodes out based on a readiness criteria. Enabling debug logging might help troubleshoot. d_rabbitmq | 2023-12-30 08:00:39.01593700:00 [noti] 0.44.0 Application mnesia exited with reason: stopped d_rabbitmq | 2023-12-30 08:00:39.08173000:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 9 retries left d_rabbitmq | 2023-12-30 08:00:39.08185000:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.08899900:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 9 retries left d_rabbitmq | 2023-12-30 08:00:39.08906100:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.08908800:00 [info] 0.222.0 Feature flag drop_unroutable_metric: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.08920100:00 [info] 0.222.0 Feature flag drop_unroutable_metric: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.08974400:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.08979100:00 [info] 0.222.0 Feature flags: [~] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.08980600:00 [info] 0.222.0 Feature flags: [ ] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.08981600:00 [info] 0.222.0 Feature flags: [ ] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.08982400:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.08983200:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.08983900:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.08987200:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.08988200:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.08989900:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.09598500:00 [info] 0.222.0 Feature flag drop_unroutable_metric: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.09690300:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.09694300:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.09695900:00 [info] 0.222.0 Feature flags: [ ] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.09696900:00 [info] 0.222.0 Feature flags: [ ] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.09699500:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.09700500:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.09701200:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.09702000:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.09705500:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.09708300:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.10327100:00 [info] 0.222.0 Feature flag empty_basic_get_metric: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.10337100:00 [info] 0.222.0 Feature flag empty_basic_get_metric: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.10417100:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.10422300:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.10424200:00 [info] 0.222.0 Feature flags: [~] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.10428400:00 [info] 0.222.0 Feature flags: [ ] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.10430000:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.10431000:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.10432100:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.10433200:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.10434300:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.10436300:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.11037300:00 [info] 0.222.0 Feature flag empty_basic_get_metric: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.11226700:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.11230300:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.11232400:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.11233400:00 [info] 0.222.0 Feature flags: [ ] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.11235500:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.11236700:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.11237500:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.11238200:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.11239100:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.11239900:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.11975000:00 [info] 0.222.0 Feature flag implicit_default_bindings: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.11993900:00 [info] 0.222.0 Feature flag implicit_default_bindings: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.12116600:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.12120400:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.12122000:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.12125800:00 [info] 0.222.0 Feature flags: [~] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.12127900:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.12128900:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.12135400:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.12136800:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.12137600:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.12138400:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.12717400:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 0 retries left d_rabbitmq | 2023-12-30 08:00:39.12732200:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.12736700:00 [info] 0.222.0 Feature flag implicit_default_bindings: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.12937600:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.12944000:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.12945900:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.12947200:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.12949600:00 [info] 0.222.0 Feature flags: [ ] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.12951200:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.12952300:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.12953400:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.12955700:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.12958300:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.13507100:00 [info] 0.222.0 Feature flag maintenance_mode_status: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.13514200:00 [info] 0.222.0 Feature flag maintenance_mode_status: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.13586800:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.13590000:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.13592000:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.13595200:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.13597200:00 [info] 0.222.0 Feature flags: [~] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.13598300:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.13599000:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.13599900:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.13600600:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.13601300:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.14187000:00 [info] 0.222.0 Creating table rabbit_node_maintenance_states for feature flag maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.14510900:00 [info] 0.222.0 Feature flag maintenance_mode_status: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.14725900:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.14731500:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.14733500:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.14734500:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.14737300:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.14739300:00 [info] 0.222.0 Feature flags: [ ] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.14740400:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.14741200:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.14744000:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.14746200:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.15295400:00 [info] 0.222.0 Feature flag quorum_queue: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.15303300:00 [info] 0.222.0 Feature flag quorum_queue: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.15371600:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.15376600:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.15378300:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.15380800:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.15382100:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.15382900:00 [info] 0.222.0 Feature flags: [~] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.15383700:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.15385900:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.15386800:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.15389000:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.15892300:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 9 retries left d_rabbitmq | 2023-12-30 08:00:39.15903000:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.15905700:00 [info] 0.222.0 Feature flag quorum_queue: migrating Mnesia table rabbit_queue... d_rabbitmq | 2023-12-30 08:00:39.16964700:00 [info] 0.222.0 Feature flag quorum_queue: migrating Mnesia table rabbit_durable_queue... d_rabbitmq | 2023-12-30 08:00:39.18035300:00 [info] 0.222.0 Feature flag quorum_queue: Mnesia tables migration done d_rabbitmq | 2023-12-30 08:00:39.18039800:00 [info] 0.222.0 Feature flag quorum_queue: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.18202200:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.18205000:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.18206200:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.18207100:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.18211900:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.18214300:00 [info] 0.222.0 Feature flags: [x] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.18215500:00 [info] 0.222.0 Feature flags: [ ] stream_queue d_rabbitmq | 2023-12-30 08:00:39.18218900:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.18224200:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.18225700:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.18809700:00 [info] 0.222.0 Feature flag stream_queue: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.18819500:00 [info] 0.222.0 Feature flag stream_queue: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.18902500:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.18905700:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.18907800:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.18910500:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.18912200:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.18913200:00 [info] 0.222.0 Feature flags: [x] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.18914600:00 [info] 0.222.0 Feature flags: [~] stream_queue d_rabbitmq | 2023-12-30 08:00:39.18915300:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.18916000:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.18916800:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.19478100:00 [info] 0.222.0 Feature flag stream_queue: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.19653900:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.19658900:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.19660500:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.19661400:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.19664400:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.19665500:00 [info] 0.222.0 Feature flags: [x] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.19666300:00 [info] 0.222.0 Feature flags: [x] stream_queue d_rabbitmq | 2023-12-30 08:00:39.19668400:00 [info] 0.222.0 Feature flags: [ ] user_limits d_rabbitmq | 2023-12-30 08:00:39.19671800:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.19673700:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.20294400:00 [info] 0.222.0 Feature flag user_limits: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.20308700:00 [info] 0.222.0 Feature flag user_limits: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.20382000:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.20386700:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.20389100:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.20390100:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.20390900:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.20393200:00 [info] 0.222.0 Feature flags: [x] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.20394200:00 [info] 0.222.0 Feature flags: [x] stream_queue d_rabbitmq | 2023-12-30 08:00:39.20395000:00 [info] 0.222.0 Feature flags: [~] user_limits d_rabbitmq | 2023-12-30 08:00:39.20395700:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.20396700:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.21037000:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 9 retries left d_rabbitmq | 2023-12-30 08:00:39.21056900:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.22243900:00 [info] 0.222.0 Feature flag user_limits: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.22437100:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.22440100:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.22442700:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.22443600:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.22447400:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.22448500:00 [info] 0.222.0 Feature flags: [x] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.22449300:00 [info] 0.222.0 Feature flags: [x] stream_queue d_rabbitmq | 2023-12-30 08:00:39.22452400:00 [info] 0.222.0 Feature flags: [x] user_limits d_rabbitmq | 2023-12-30 08:00:39.22453700:00 [info] 0.222.0 Feature flags: [ ] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.22454600:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.23073900:00 [info] 0.222.0 Feature flag virtual_host_metadata: supported, attempt to enable... d_rabbitmq | 2023-12-30 08:00:39.23083000:00 [info] 0.222.0 Feature flag virtual_host_metadata: mark as enabledstate_changing d_rabbitmq | 2023-12-30 08:00:39.23175200:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.23179000:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.23180900:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.23184400:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.23186500:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.23187500:00 [info] 0.222.0 Feature flags: [x] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.23190200:00 [info] 0.222.0 Feature flags: [x] stream_queue d_rabbitmq | 2023-12-30 08:00:39.23191800:00 [info] 0.222.0 Feature flags: [x] user_limits d_rabbitmq | 2023-12-30 08:00:39.23192700:00 [info] 0.222.0 Feature flags: [~] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.23193500:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.23730500:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 9 retries left d_rabbitmq | 2023-12-30 08:00:39.23743400:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.24909400:00 [info] 0.222.0 Feature flag virtual_host_metadata: mark as enabledtrue d_rabbitmq | 2023-12-30 08:00:39.25082900:00 [info] 0.222.0 Feature flags: list of feature flags found: d_rabbitmq | 2023-12-30 08:00:39.25087300:00 [info] 0.222.0 Feature flags: [x] drop_unroutable_metric d_rabbitmq | 2023-12-30 08:00:39.25089200:00 [info] 0.222.0 Feature flags: [x] empty_basic_get_metric d_rabbitmq | 2023-12-30 08:00:39.25090400:00 [info] 0.222.0 Feature flags: [x] implicit_default_bindings d_rabbitmq | 2023-12-30 08:00:39.25092800:00 [info] 0.222.0 Feature flags: [x] maintenance_mode_status d_rabbitmq | 2023-12-30 08:00:39.25094400:00 [info] 0.222.0 Feature flags: [x] quorum_queue d_rabbitmq | 2023-12-30 08:00:39.25095500:00 [info] 0.222.0 Feature flags: [x] stream_queue d_rabbitmq | 2023-12-30 08:00:39.25096600:00 [info] 0.222.0 Feature flags: [x] user_limits d_rabbitmq | 2023-12-30 08:00:39.25099000:00 [info] 0.222.0 Feature flags: [x] virtual_host_metadata d_rabbitmq | 2023-12-30 08:00:39.25102800:00 [info] 0.222.0 Feature flags: feature flag states written to disk: yes d_rabbitmq | 2023-12-30 08:00:39.25750800:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 9 retries left d_rabbitmq | 2023-12-30 08:00:39.25767500:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.26651600:00 [info] 0.222.0 Waiting for Mnesia tables for 30000 ms, 9 retries left d_rabbitmq | 2023-12-30 08:00:39.26667100:00 [info] 0.222.0 Successfully synced tables from a peer d_rabbitmq | 2023-12-30 08:00:39.26670300:00 [info] 0.222.0 Peer discovery backend rabbit_peer_discovery_classic_config does not support registration, skipping registration. d_rabbitmq | 2023-12-30 08:00:39.26672900:00 [info] 0.222.0 Will try to unlock with peer discovery backend rabbit_peer_discovery_classic_config d_rabbitmq | 2023-12-30 08:00:39.26678200:00 [info] 0.222.0 Running boot step database_sync defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26683900:00 [info] 0.222.0 Running boot step feature_flags defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26693900:00 [info] 0.222.0 Running boot step codec_correctness_check defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26697200:00 [info] 0.222.0 Running boot step external_infrastructure defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26699300:00 [info] 0.222.0 Running boot step rabbit_registry defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26708100:00 [info] 0.222.0 Running boot step rabbit_auth_mechanism_cr_demo defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26724900:00 [info] 0.222.0 Running boot step rabbit_queue_location_random defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26730500:00 [info] 0.222.0 Running boot step rabbit_event defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26746000:00 [info] 0.222.0 Running boot step rabbit_auth_mechanism_amqplain defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26755100:00 [info] 0.222.0 Running boot step rabbit_auth_mechanism_plain defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26760100:00 [info] 0.222.0 Running boot step rabbit_exchange_type_direct defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26767500:00 [info] 0.222.0 Running boot step rabbit_exchange_type_fanout defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26772900:00 [info] 0.222.0 Running boot step rabbit_exchange_type_headers defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26782600:00 [info] 0.222.0 Running boot step rabbit_exchange_type_topic defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26792300:00 [info] 0.222.0 Running boot step rabbit_mirror_queue_mode_all defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26798300:00 [info] 0.222.0 Running boot step rabbit_mirror_queue_mode_exactly defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26804900:00 [info] 0.222.0 Running boot step rabbit_mirror_queue_mode_nodes defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26812100:00 [info] 0.222.0 Running boot step rabbit_priority_queue defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26814800:00 [info] 0.222.0 Priority queues enabled, real BQ is rabbit_variable_queue d_rabbitmq | 2023-12-30 08:00:39.26820600:00 [info] 0.222.0 Running boot step rabbit_queue_location_client_local defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26825800:00 [info] 0.222.0 Running boot step rabbit_queue_location_min_masters defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26831400:00 [info] 0.222.0 Running boot step kernel_ready defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26835800:00 [info] 0.222.0 Running boot step rabbit_sysmon_minder defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26848400:00 [info] 0.222.0 Running boot step rabbit_epmd_monitor defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.26927500:00 [info] 0.567.0 epmd monitor knows us, inter-node communication (distribution) port: 25672 d_rabbitmq | 2023-12-30 08:00:39.26937000:00 [info] 0.222.0 Running boot step guid_generator defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.27131000:00 [info] 0.222.0 Running boot step rabbit_node_monitor defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.27145000:00 [info] 0.571.0 Starting rabbit_node_monitor d_rabbitmq | 2023-12-30 08:00:39.27161300:00 [info] 0.222.0 Running boot step delegate_sup defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.27218600:00 [info] 0.222.0 Running boot step rabbit_memory_monitor defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.27240200:00 [info] 0.222.0 Running boot step core_initialized defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.27242400:00 [info] 0.222.0 Running boot step upgrade_queues defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.27756200:00 [info] 0.222.0 message_store upgrades: 1 to apply d_rabbitmq | 2023-12-30 08:00:39.27764100:00 [info] 0.222.0 message_store upgrades: Applying rabbit_variable_queue:move_messages_to_vhost_store d_rabbitmq | 2023-12-30 08:00:39.27774700:00 [info] 0.222.0 message_store upgrades: No durable queues found. Skipping message store migration d_rabbitmq | 2023-12-30 08:00:39.27779900:00 [info] 0.222.0 message_store upgrades: Removing the old message store data d_rabbitmq | 2023-12-30 08:00:39.27841300:00 [info] 0.222.0 message_store upgrades: All upgrades applied successfully d_rabbitmq | 2023-12-30 08:00:39.28374400:00 [info] 0.222.0 Running boot step channel_tracking defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.28652400:00 [info] 0.222.0 Setting up a table for channel tracking on this node: tracked_channel_on_node_rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:39.28908300:00 [info] 0.222.0 Setting up a table for channel tracking on this node: tracked_channel_table_per_user_on_node_rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:39.28921800:00 [info] 0.222.0 Running boot step rabbit_channel_tracking_handler defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.28926700:00 [info] 0.222.0 Running boot step connection_tracking defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29211800:00 [info] 0.222.0 Setting up a table for connection tracking on this node: tracked_connection_on_node_rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:39.29488800:00 [info] 0.222.0 Setting up a table for per-vhost connection counting on this node: tracked_connection_per_vhost_on_node_rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:39.29738400:00 [info] 0.222.0 Setting up a table for per-user connection counting on this node: tracked_connection_table_per_user_on_node_rabbit892990533f7a d_rabbitmq | 2023-12-30 08:00:39.29763300:00 [info] 0.222.0 Running boot step rabbit_connection_tracking_handler defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29768500:00 [info] 0.222.0 Running boot step rabbit_exchange_parameters defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29773200:00 [info] 0.222.0 Running boot step rabbit_mirror_queue_misc defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29811900:00 [info] 0.222.0 Running boot step rabbit_policies defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29839600:00 [info] 0.222.0 Running boot step rabbit_policy defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29850200:00 [info] 0.222.0 Running boot step rabbit_queue_location_validator defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29857200:00 [info] 0.222.0 Running boot step rabbit_quorum_memory_manager defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29864600:00 [info] 0.222.0 Running boot step rabbit_stream_coordinator defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29883100:00 [info] 0.222.0 Running boot step rabbit_vhost_limit defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.29892100:00 [info] 0.222.0 Running boot step rabbit_mgmt_reset_handler defined by app rabbitmq_management d_rabbitmq | 2023-12-30 08:00:39.29903500:00 [info] 0.222.0 Running boot step rabbit_mgmt_db_handler defined by app rabbitmq_management_agent d_rabbitmq | 2023-12-30 08:00:39.29908400:00 [info] 0.222.0 Management plugin: using rates mode basic d_rabbitmq | 2023-12-30 08:00:39.29950700:00 [info] 0.222.0 Running boot step recovery defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.30034000:00 [info] 0.222.0 Running boot step empty_db_check defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.30037700:00 [info] 0.222.0 Will seed default virtual host and user... d_rabbitmq | 2023-12-30 08:00:39.30045000:00 [info] 0.222.0 Adding vhost / (description: Default virtual host, tags: []) d_rabbitmq | 2023-12-30 08:00:39.31279800:00 [info] 0.632.0 Making sure data directory /var/lib/rabbitmq/mnesia/rabbit892990533f7a/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L for vhost / exists d_rabbitmq | 2023-12-30 08:00:39.31382900:00 [info] 0.632.0 Setting segment_entry_count for vhost / with 0 queues to 2048 d_rabbitmq | 2023-12-30 08:00:39.31625000:00 [info] 0.632.0 Starting message stores for vhost / d_rabbitmq | 2023-12-30 08:00:39.31639800:00 [info] 0.636.0 Message store 628WB79CIFDYO9LJI6DKMI09L/msg_store_transient: using rabbit_msg_store_ets_index to provide index d_rabbitmq | 2023-12-30 08:00:39.31762800:00 [info] 0.632.0 Started message store of type transient for vhost / d_rabbitmq | 2023-12-30 08:00:39.31773800:00 [info] 0.640.0 Message store 628WB79CIFDYO9LJI6DKMI09L/msg_store_persistent: using rabbit_msg_store_ets_index to provide index d_rabbitmq | 2023-12-30 08:00:39.31833100:00 [warn] 0.640.0 Message store 628WB79CIFDYO9LJI6DKMI09L/msg_store_persistent: rebuilding indices from scratch d_rabbitmq | 2023-12-30 08:00:39.31898900:00 [info] 0.632.0 Started message store of type persistent for vhost / d_rabbitmq | 2023-12-30 08:00:39.31912400:00 [info] 0.632.0 Recovering 0 queues of type rabbit_classic_queue took 4ms d_rabbitmq | 2023-12-30 08:00:39.31915500:00 [info] 0.632.0 Recovering 0 queues of type rabbit_quorum_queue took 0ms d_rabbitmq | 2023-12-30 08:00:39.31917300:00 [info] 0.632.0 Recovering 0 queues of type rabbit_stream_queue took 0ms d_rabbitmq | 2023-12-30 08:00:39.32178300:00 [info] 0.222.0 Created user guest d_rabbitmq | 2023-12-30 08:00:39.32322600:00 [info] 0.222.0 Successfully set user tags for user guest to [administrator] d_rabbitmq | 2023-12-30 08:00:39.32476700:00 [info] 0.222.0 Successfully set permissions for guest in virtual host / to .*, .*, .* d_rabbitmq | 2023-12-30 08:00:39.32481000:00 [info] 0.222.0 Running boot step rabbit_looking_glass defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32485100:00 [info] 0.222.0 Running boot step rabbit_core_metrics_gc defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32496400:00 [info] 0.222.0 Running boot step background_gc defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32513300:00 [info] 0.222.0 Running boot step routing_ready defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32517300:00 [info] 0.222.0 Running boot step pre_flight defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32519500:00 [info] 0.222.0 Running boot step notify_cluster defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32524600:00 [info] 0.222.0 Running boot step networking defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32528400:00 [info] 0.222.0 Running boot step definition_import_worker_pool defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32535200:00 [info] 0.279.0 Starting worker pool definition_import_pool with 16 processes in it d_rabbitmq | 2023-12-30 08:00:39.32619300:00 [info] 0.222.0 Running boot step cluster_name defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32625900:00 [info] 0.222.0 Initialising internal cluster ID to rabbitmq-cluster-id-YZ_t6O--WTeTPXS7viBMPg d_rabbitmq | 2023-12-30 08:00:39.32774300:00 [info] 0.222.0 Running boot step direct_client defined by app rabbit d_rabbitmq | 2023-12-30 08:00:39.32785400:00 [info] 0.222.0 Running boot step rabbit_management_load_definitions defined by app rabbitmq_management d_rabbitmq | 2023-12-30 08:00:39.32796100:00 [info] 0.685.0 Resetting node maintenance status d_rabbitmq | 2023-12-30 08:00:39.33736800:00 [info] 0.744.0 Management plugin: HTTP (non-TLS) listener started on port 15672 d_rabbitmq | 2023-12-30 08:00:39.33745300:00 [info] 0.772.0 Statistics database started. d_rabbitmq | 2023-12-30 08:00:39.33750700:00 [info] 0.771.0 Starting worker pool management_worker_pool with 3 processes in it d_rabbitmq | 2023-12-30 08:00:39.34215800:00 [info] 0.786.0 Prometheus metrics: HTTP (non-TLS) listener started on port 15692 d_rabbitmq | 2023-12-30 08:00:39.34223700:00 [info] 0.685.0 Ready to start client connection listeners d_rabbitmq | 2023-12-30 08:00:39.34341600:00 [info] 0.830.0 started TCP listener on [::]:5672 d_rabbitmq | completed with 4 plugins. d_rabbitmq | 2023-12-30 08:00:39.39162900:00 [info] 0.685.0 Server startup complete; 4 plugins started. d_rabbitmq | 2023-12-30 08:00:39.39162900:00 [info] 0.685.0 * rabbitmq_prometheus d_rabbitmq | 2023-12-30 08:00:39.39162900:00 [info] 0.685.0 * rabbitmq_management d_rabbitmq | 2023-12-30 08:00:39.39162900:00 [info] 0.685.0 * rabbitmq_web_dispatch d_rabbitmq | 2023-12-30 08:00:39.39162900:00 [info] 0.685.0 * rabbitmq_management_agent要停止Docker Compose的Docker容器执行如下命令 docker-compose down -v [] Running 3/3✔ Container d_rabbitmq Removed 6.4s✔ Container d_consul Removed 0.3s✔ Network docker_microservices Removed 0.2s下一步将配置加载到Consul KV中进行修改docker-compose.yml文件 version: 3services:consul-importer:image: consul-importer:1.0depends_on:- consul-devnetworks:- microservicesconsul-dev:# ...rabbitmq-dev:# ...networks:microservices:driver: bridge这里利用前面构建的consul-importer:1.0镜像来进行Consul KV存储的导入使用参数depends_on在compose文件中建立依赖关系让它在consul-dev容器之后启动。无论如何不能保证consul-importer运行时Consul服务器已经就绪。原因是Docker只知道容器何时启动不知道Consul服务器何时启动并准备接受请求这是要在导入程序镜像中添加脚本的原因该脚本会重试导入直到导入成功为止。 当再次运行docker-compose up时会看到相应的输出加载了配置并成功退出如下所示 docker-compose up ... consul-importer-1 | Imported: config consul-importer-1 | Imported: config/defaults,docker/application.yml consul | 2023-12-31T00:47:17.155Z [INFO] agent: Synced node info consul | 2023-12-31T00:47:17.273Z [INFO] agent.server: federation state anti-entropy synced consul-importer-1 exited with code 0 ...consul-importer容器是作为函数而不是连续运行的服务这里使用简单地加载配置然后完成的命令替换了Consul镜像中的默认命令命令在Dockerfile中定义将服务器作为进程运行Docker知道命令已退出容器无事可做因此不必保持容器处于活动状态。 还可以查看docker-compose配置中正在运行的容器是哪些可使用docker-compose ps命令如下所示 docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS consul consul:1.11.1 docker-entrypoint.s… consul-dev 18 minutes ago Up 18 minutes 8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500-8500/tcp, 0.0.0.0:8600-8600/udp d_rabbitmq rabbitmq:management docker-entrypoint.s… rabbitmq-dev 18 minutes ago Up 18 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672-5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672-15672/tcp使用浏览器访问http://localhost:8500/就可以进入Consul界面导航到KV选项卡就可以看到config条目进一步可以看到已加载的配置如下所示 接着向Docker Compose中添加前端定义只需要添加基于Nginx构建的镜像并公开重定向到内部端口的端口3000默认情况下基本镜像的端口为80可以更改公开的端口但要相应地调整Gateway中的CORS配置docker-compose.yml添加如下 version: 3services:frontend:image: challenge-frontend:1.0ports:- 3000:80consul-importer:# ...consul-dev:# ...rabbitmq-dev:# ...networks:microservices:driver: bridge为了使整个系统正常运行需要将Spring Boot微服务添加到Docker Compose文件中将它们配置为使用之前创建的同一网络这些容器都需要到达consul和d_rabbitmq容器才能正常工作有两种不同的策略 对于Consul设置Spring中的集中式配置功能要求服务在引导阶段知道服务器所在的位置。需要覆盖属性spring.cloud.consul.host将其指向consul容器这可以通过环境变量来实现在Spring Boot中如果设置的环境变量与现有属性匹配或遵循某种命名约定将覆盖本地配置。对于RabbitMQ配置将使用docker配置文件。假设微服务连接到Consul并且配置服务器具有defaults,docker的一个预加载条目那么它们都将使用其中的属性。要注意在配置文件中RabbitMQ主机改为了d_rabbitmq了。要激活每个微服务中的docker配置文件使用Spring Boot属性来通过环境变量SPRING_PROFILES_ACTIVEdocker来传递。 另外在compose中配置Spring Boot容器时需要注意 不在localhost:8000上将后端服务直接公开给主机Gateway服务除外因此不会将ports部分添加到Multiplication、Gamification和Logs服务中。对后端容器使用depends_on参数以等待consul-importer运行因此在Spring Boot应用程序启动时docker配置的Consul配置将可用。将rabbitmq作为这些服务的依赖项但这不能保证RabbitMQ服务器在应用程序启动前就已准备就绪但Spring Boot默认情况下会重试连接到服务器系统最终将会稳定。 完整的配置如下 version: 3services:frontend:image: challenge-frontend:1.0ports:- 3000:80multiplication:image: multiplication:1.0.0environment:- SPRING_PROFILES_ACTIVEdocker- SPRING_CLOUD_CONSUL_HOSTconsul- SPRING_DATASOURCE_URLjdbc:mysql://mysqlServer33106:3306/multiplication?useUnicodetruecharacterEncodingutf8depends_on:- rabbitmq-dev- consul-importer- mysql-server-devnetworks:- microservicesgamification:image: gamification:1.0.0environment:- SPRING_PROFILES_ACTIVEdocker- SPRING_CLOUD_CONSUL_HOSTconsul- SPRING_DATASOURCE_URLjdbc:mysql://mysqlServer33106:3306/gamification?useUnicodetruecharacterEncodingutf8depends_on:- rabbitmq-dev- consul-importer- mysql-server-dev- multiplicationnetworks:- microservicesgateway:image: gateway:1.0.0ports:- 8000:8000environment:- SPRING_PROFILES_ACTIVEdocker- SPRING_CLOUD_CONSUL_HOSTconsuldepends_on:- rabbitmq-dev- consul-importernetworks:- microserviceslogs:image: logs:1.0.0environment:- SPRING_PROFILES_ACTIVEdocker- SPRING_CLOUD_CONSUL_HOSTconsuldepends_on:- rabbitmq-dev- consul-importernetworks:- microservicesconsul-importer:image: consul-importer:1.0depends_on:- consul-devnetworks:- microservicesconsul-dev:image: consul:1.11.1container_name: consulports:- 8500:8500- 8600:8600/udpcommand: agent -dev -nodelearnmicro -client0.0.0.0 -log-levelINFOnetworks:- microservicesrabbitmq-dev:image: rabbitmq:managementcontainer_name: rabbitmqports:- 5672:5672- 15672:15672networks:- microservicesmysql-server-dev:image: mysqlcontainer_name: mysqlServer33106privileged: truevolumes:- Z:\_Docker\mysql\data:/var/lib/mysql- Z:\_Docker\mysql\conf:/etc/mysql/conf.denvironment:MYSQL_ROOT_PASSWORD: 123456ports:- 33106:3306networks:- microservicesnetworks:microservices:driver: bridge现在就可用测试完整的Docker部署系统了运行docker-compose up命令就可以在输出中看到许多日志这些日志由启动的多个服务生成。可能会看到某些后端服务在尝试连接到RabbitMQ时会抛出异常这是预期的情况因为RabbitMQ服务启动需要更长的时间在rabbitmq服务启动就绪后将恢复正常。 可能还会遇到没有足够的内存或CPU来同时运行所有容器而产生的错误这不是异常因为每个微服务容器最多可以占用1GB的RAM。 要了解系统状态可以使用Docker提供的聚合日志附加输出或logs容器的输出。可以从终端使用另一个docker-compose logs [container_name]来查看对应的日志下面就是检查logs日志的输出 docker-compose logs logs [...] logs-1 | [gamification ] INFO 07:36:28.759 [http-nio-8081-exec-10] c.z.g.game.LeaderBoardController - 查询排行榜 logs-1 | [multiplication ] INFO 07:36:28.772 [http-nio-8080-exec-8] c.z.m.user.UserController - 解析用户别名[202, 154, 3, 1, 252, 102, 153, 152] logs-1 | [gamification ] INFO 07:36:33.809 [http-nio-8081-exec-2] c.z.g.game.LeaderBoardController - 查询排行榜 logs-1 | [multiplication ] INFO 07:36:33.823 [http-nio-8080-exec-9] c.z.m.user.UserController - 解析用户别名[202, 154, 3, 1, 252, 102, 153, 152] logs-1 | [gamification ] INFO 07:36:38.866 [http-nio-8081-exec-3] c.z.g.game.LeaderBoardController - 查询排行榜 logs-1 | [multiplication ] INFO 07:36:38.880 [http-nio-8080-exec-1] c.z.m.user.UserController - 解析用户别名[202, 154, 3, 1, 252, 102, 153, 152] logs-1 | [gamification ] INFO 07:36:43.912 [http-nio-8081-exec-5] c.z.g.game.LeaderBoardController - 查询排行榜 logs-1 | [multiplication ] INFO 07:36:43.923 [http-nio-8080-exec-2] c.z.m.user.UserController - 解析用户别名[202, 154, 3, 1, 252, 102, 153, 152] logs-1 | [gamification ] INFO 07:36:48.956 [http-nio-8081-exec-6] c.z.g.game.LeaderBoardController - 查询排行榜 logs-1 | [multiplication ] INFO 07:36:48.969 [http-nio-8080-exec-4] c.z.m.user.UserController - 解析用户别名[202, 154, 3, 1, 252, 102, 153, 152] logs-1 | [gamification ] INFO 07:36:54.017 [http-nio-8081-exec-8] c.z.g.game.LeaderBoardController - 查询排行榜 logs-1 | [multiplication ] INFO 07:36:54.029 [http-nio-8080-exec-5] c.z.m.user.UserController - 解析用户别名[202, 154, 3, 1, 252, 102, 153, 152] [...]现在Consul中检查服务可以看到运行状况检查是否通过这意味着服务已经运行并连接到RabbitMQ了如下所示 点击一项服务如multiplication可以看到docker网络中容器的地址如图所示 使用浏览器访问http://localhost:3000/就可以使用应用程序了如下所示 数据持久化应该考虑添加卷来存储数据库文件。 使用Docker扩展系统 使用docker compose还可以使用单个命令来扩展服务。 首先启动系统docker-compose up然后从另一个终端再次运行带有scale参数的命令指出服务名称和希望获取的实例数可在单个命令中多次使用scale参数如下所示 docker-compose up --scale multiplication2 --scale gamification2现在查看终端日志就可以看到Docker Compose为multiplication和gamification服务启动了额外的实例也可以在Consul服务中看到如下所示 从Consul中可以看到其中的变化借助Consul发现、网关模式、Spring Cloud负载均衡器和RabbitMQ消费者的负载均衡系统会再次在多个实例之间适当地负载均衡可使用HTTPie命令来进行尝试 http POST :8000/attempts factorA50 factorB60 userAliasnoise10 guess3000在日志中可以看到实例如何处理来自API的请求如下所示 gamification-1 | 2023-12-31T08:12:49.943Z INFO 1 --- [gamification] [nio-8081-exec-5] [65912281dacc46bac85523453edcb3f3-9b6b761c5b6a9382] c.z.g.game.LeaderBoardController : 查询排行榜 logs-1 | [gamification ] INFO 08:12:49.943 [http-nio-8081-exec-5] c.z.g.game.LeaderBoardController - 查询排行榜 multiplication-2 | 2023-12-31T08:12:49.956Z INFO 1 --- [multiplication] [nio-8080-exec-5] [659122819e60bbd6bd36c80f10415a6c-c82fbfb9011596f0] c.z.multiplication.user.UserController : 解析用户别名[202, 154, 252, 3, 1, 304, 102, 153, 152, 302, 303] logs-1 | [multiplication ] INFO 08:12:49.956 [http-nio-8080-exec-5] c.z.m.user.UserController - 解析用户别名[202, 154, 252, 3, 1, 304, 102, 153, 152, 302, 303] gamification-2 | 2023-12-31T08:12:55.010Z INFO 1 --- [gamification] [nio-8081-exec-4] [6591228710d45c9284ba9a61e5c0744d-62f697171d3aae75] c.z.g.game.LeaderBoardController : 查询排行榜 logs-1 | [gamification ] INFO 08:12:55.010 [http-nio-8081-exec-4] c.z.g.game.LeaderBoardController - 查询排行榜 multiplication-2 | 2023-12-31T08:12:55.027Z INFO 1 --- [multiplication] [nio-8080-exec-6] [65912287ef8a6efed625404105289f9f-fc0e8491e8bb04e7] c.z.multiplication.user.UserController : 解析用户别名[202, 154, 252, 3, 1, 304, 102, 153, 152, 302, 303] logs-1 | [multiplication ] INFO 08:12:55.027 [http-nio-8080-exec-6] c.z.m.user.UserController - 解析用户别名[202, 154, 252, 3, 1, 304, 102, 153, 152, 302, 303] multiplication-2 | 2023-12-31T08:12:59.806Z INFO 1 --- [multiplication] [nio-8080-exec-8] [6591226d4e0180f5952d698c92aca5ea-608c654d76df9c9f] c.z.multiplication.user.UserController : 解析用户别名[202, 154, 252, 3, 1, 102, 153, 152, 302, 303, 304] logs-1 | [multiplication ] INFO 08:12:59.806 [http-nio-8080-exec-8] c.z.m.user.UserController - 解析用户别名[202, 154, 252, 3, 1, 102, 153, 152, 302, 303, 304] gamification-1 | 2023-12-31T08:13:00.063Z INFO 1 --- [gamification] [nio-8081-exec-7] [6591228ce8dd021b4bf8138109b7bdbe-6830efc62e66a5c2] c.z.g.game.LeaderBoardController : 查询排行榜 logs-1 | [gamification ] INFO 08:13:00.063 [http-nio-8081-exec-7] c.z.g.game.LeaderBoardController - 查询排行榜 multiplication-2 | 2023-12-31T08:13:00.077Z INFO 1 --- [multiplication] [nio-8080-exec-9] [6591228cd6801e2722b013ceb70ee8d3-908ed9142522d3da] c.z.multiplication.user.UserController : 解析用户别名[202, 154, 252, 3, 1, 304, 102, 153, 152, 302, 303] logs-1 | [multiplication ] INFO 08:13:00.077 [http-nio-8080-exec-9] c.z.m.user.UserController - 解析用户别名[202, 154, 252, 3, 1, 304, 102, 153, 152, 302, 303] multiplication-2 | 2023-12-31T08:13:01.669Z INFO 1 --- [multiplication] [io-8080-exec-10] [6591227ce7aa7b1af8117cf72707d5e9-d36245ec69c9f940] c.z.multiplication.user.UserController : 解析用户别名[202, 154, 252, 3, 1, 102, 153, 152, 302, 303, 304] logs-1 | [multiplication ] INFO 08:13:01.669 [http-nio-8080-exec-10] c.z.m.user.UserController - 解析用 户别名[202, 154, 252, 3, 1, 102, 153, 152, 302, 303, 304]共享Docker镜像 目前为止所有镜像都存储在本地计算机中这不能实现“一次构建随处部署”的策略。 Docker Hub是一个公共注册表从中下载的RabbitMQ和Consul官方镜像以及微服务的基础镜像。如果在这里上传自己的镜像每个人就都可以使用了。 关于如何使用Docker Hub上传镜像这里不再介绍感兴趣的请自己查找相关资料。 小结 文章介绍了Docker容器化技术有助于将微服务部署到多个环境中简述了Spring Boot应用程序如何构建Docker镜像并使用Docker Compose实现对Docker容器集群的快速编排这样使多个容器相互配合来完成整个应用系统可以轻松、高效的管理容器提高效率。
http://www.pierceye.com/news/288535/

相关文章:

  • 铭誉摄影网站北京网站建设开发
  • 单位还能建设网站吗做网站的程序员留备份
  • 松江团购做网站产品开发的基本流程
  • 织梦后台网站栏目空白小广告制作
  • 钦州建设局网站云南网站建设招商
  • 韩国风格网站php源码网站怎么放到服务器上
  • 网站调优yandex搜索引擎入口
  • 医院网站建设具体内容商丘网站制作电话
  • 别人做的网站直播网站
  • 足球梦网站建设的基本思路沧州做企业网站
  • 招标建设网站什么是微信wordpress
  • 建设银行网站连不上成都网站快照优化公司
  • 网站 永久关停 请示广州网站建设骏域网站
  • 个人建站模板外国网站翻墙怎么做
  • 保定网站设计制作公司有经验的中山网站建设
  • 免费网站建设那个好wordpress本地怎么上传服务器
  • 自己做的网站加载慢WordPress模板首页文件是啥
  • 教学网站建设网站建设岗位有哪些
  • 网站建设合同的验收表网页网站的区别是什么
  • 开福区网站建设中wordpress调用所有栏目
  • 网站建设的流程是什么意思青岛做网站公司
  • 什么网站有项目做中铁建设企业门户网
  • 网站域名商代理商安卓商店
  • 深圳中英文网站建设广州知名设计公司排名
  • 一个公司设计网站怎么做的蜜桃传奇免费网页版
  • 网络推广网站培训班有人用wordpress默认主题
  • 网站建设 后台南宁做网站方案
  • 在线制作插画网站网站建设有哪些公司
  • 合肥的网站建设剂屏自己可以做开奖网站吗
  • 官网设计比较好看的网站学校网站建设对教学的意义