8 容器化微服务

这篇具有很好参考价值的文章主要介绍了8 容器化微服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面的文章:
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应用程序等。一旦虚拟机正常工作,就可以将其转移到运行了虚拟机监控程序的其他任何计算机上。其层次结构如图所示:

但是,将所有程序放到一个虚拟机中并不灵活,如果要扩展,则必须进入虚拟机,添加新实例,并确保分配更多CPU、内存等,需要了解所有组件的工作原理,部署过程不再那么容易。
更动态的方法是为每个服务和工具配备独立的虚拟机,然后,添加一些网络配置,确保它们可以互相连接。由于使用服务发现和动态扩展,可以添加更多运行了微服务的虚拟机实例,并透明地使用。这些新实例只要使用其地址在Consul中注册即可。层次结构如图所示。这比单个VM更好,但考虑到每个虚拟机都需要自己的操作系统,会浪费大量资源,而且,在虚拟机编排方面带来很多挑战:监视、创建新实例、配置网络、存储等。

随着虚拟化技术的发展,虚拟机已经被废弃了,容器成为主流的应用程序虚拟化方式。因为容器不需要安装操作系统,体积要小得多,占用资源也更少。另外,像Docker这样的容器化平台大大简化了云和本地部署,并提供易于使用的工具来打包应用程序,将它们作为容器运行并在公共注册表中共享。

Docker

容器在业界存在很多年了,但Docker的流行使容器重焕光彩,因此许多容器的定义和观点都是从Docker的架构中产生的。Docker实在太流行了,以至于容器化也称为Docker化。Docker是一个基于Linux内核的、构建、传输和运行轻量级容器的平台。Docker默认支持Linux平台。借助在Virtual Box之上运行的Boot2Docker, Docker也支持Mac和Windows平台。亚马逊的EC2 Container Service(ECS)默认支持在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:21@sha256: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{id='multiplication', name='multiplication', tags=[], address='6732d0548338', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://6732d0548338:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
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{id='multiplication', name='multiplication', tags=[], address='6732d0548338', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://6732d0548338:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
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网络将其连接起来,层次结构如图所示:

下面就来看看Spring Boot如何构建Docker映像,这样就不需要自己创建Dockerfile了。

Spring Boot和Buildpacks

Spring Boot支持云原生的Buildpacks来构建Open Container Initiative(OCI)镜像,旨在帮助打包应用程序以将其部署到任何云提供商的项目,可在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镜像,如下所示:

Docker化微服务

首先为Spring Boot应用程序构建所有镜像,在每个项目文件夹下执行以下命令:

> ./mvnw spring-boot:build-image

Docker化前端

在前端项目创建一个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: rabbitmq
  cloud:
    consul:
      discovery:
        instance-id: ${spring.application.name}-${random.int(1000)}

该配置执行如下操作:

  • 将RabbitMQ主机设为rabbitmq,覆盖默认的localhost,要确保消息代理的容器在该地址可用。
  • 覆盖分配给正在运行的服务的实例标识符,以在服务注册表中使用。默认的Spring Consul配置将应用程序名称与端口号连接在一起,该方法对容器无效。在Docker中运行同一服务的多个实例时,都使用相同的内部端口,因此会有相同的标识符。为解决这个问题,可使用随机数为后缀。

下图显示了Consul用户界面添加的配置:
8 容器化微服务,开发技术,微服务,容器化,Docker
然后将配置导出到文件,可在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_ADDR=consul: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: "3"

services:
  consul-dev:
    image: consul:latest
    container_name: d_consul
    ports:
      - '8500:8500'
      - '8600:8600/udp'
    command: 'agent -dev -node=learnmicro -client=0.0.0.0 -log-level=INFO'
    networks:
      - microservices
  rabbitmq-dev:
    image: rabbitmq:management
    container_name: d_rabbitmq
    ports:
      - '5672:5672'
      - '15672:15672'
    networks:
      - microservices

networks:
  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 up

Docker 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: index=1 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: follower="Node 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: server="learnmicro (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: event=member-join server=learnmicro.dc1 area=wan
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: address=0.0.0.0:8600 network=tcp
d_consul    | 2023-12-30T08:00:35.266Z [INFO]  agent: Started DNS server: address=0.0.0.0:8600 network=udp
d_consul    | 2023-12-30T08:00:35.267Z [INFO]  agent: Starting server: address=[::]:8500 network=tcp protocol=http
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 network=tcp
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: node="Node at 127.0.0.1:8300 [Candidate]" term=2
d_consul    | 2023-12-30T08:00:35.334Z [INFO]  agent.server.raft: election won: tally=1
d_consul    | 2023-12-30T08:00:35.334Z [INFO]  agent.server.raft: entering leader state: leader="Node 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: payload=learnmicro
d_consul    | 2023-12-30T08:00:35.335Z [INFO]  agent.leader: started routine: routine="federation state anti-entropy"
d_consul    | 2023-12-30T08:00:35.335Z [INFO]  agent.leader: started routine: routine="federation state pruning"
d_consul    | 2023-12-30T08:00:35.336Z [INFO]  connect.ca: initialized primary datacenter CA with provider: provider=consul
d_consul    | 2023-12-30T08:00:35.336Z [INFO]  agent.leader: started routine: routine="intermediate cert renew watch"
d_consul    | 2023-12-30T08:00:35.336Z [INFO]  agent.leader: started routine: routine="CA root pruning"
d_consul    | 2023-12-30T08:00:35.336Z [INFO]  agent.leader: started routine: routine="CA root expiration metric"
d_consul    | 2023-12-30T08:00:35.336Z [INFO]  agent.leader: started routine: routine="CA signing expiration metric"
d_consul    | 2023-12-30T08:00:35.336Z [INFO]  agent.leader: started routine: routine="virtual IP version check"
d_consul    | 2023-12-30T08:00:35.336Z [INFO]  agent.server: member joined, marking health alive: member=learnmicro partition=default
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.816748+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:36.825064+00:00 [info] <0.222.0> Feature flags:   [ ] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:36.825093+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:36.825103+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:36.825115+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:36.825125+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:36.825132+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:36.825140+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:37.044042+00:00 [noti] <0.44.0> Application syslog exited with reason: stopped
d_rabbitmq  | 2023-12-30 08:00:37.044110+00: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.053636+00:00 [noti] <0.222.0> Logging: configured log handlers are now ACTIVE
d_rabbitmq  | 2023-12-30 08:00:37.179591+00:00 [info] <0.222.0> ra: starting system quorum_queues
d_rabbitmq  | 2023-12-30 08:00:37.179697+00:00 [info] <0.222.0> starting Ra system: quorum_queues in directory: /var/lib/rabbitmq/mnesia/rabbit@892990533f7a/quorum/rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:37.228271+00: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.237355+00: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.242485+00:00 [info] <0.222.0> ra: starting system coordination
d_rabbitmq  | 2023-12-30 08:00:37.242512+00:00 [info] <0.222.0> starting Ra system: coordination in directory: /var/lib/rabbitmq/mnesia/rabbit@892990533f7a/coordination/rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:37.244060+00: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.244209+00: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.247005+00:00 [info] <0.222.0>
d_rabbitmq  | 2023-12-30 08:00:37.247005+00:00 [info] <0.222.0>  Starting RabbitMQ 3.9.11 on Erlang 24.2 [jit]
d_rabbitmq  | 2023-12-30 08:00:37.247005+00:00 [info] <0.222.0>  Copyright (c) 2007-2021 VMware, Inc. or its affiliates.
d_rabbitmq  | 2023-12-30 08:00:37.247005+00: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/rabbit@892990533f7a_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.247784+00:00 [info] <0.222.0>
d_rabbitmq  | 2023-12-30 08:00:37.247784+00:00 [info] <0.222.0>  node           : rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:37.247784+00:00 [info] <0.222.0>  home dir       : /var/lib/rabbitmq
d_rabbitmq  | 2023-12-30 08:00:37.247784+00: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.247784+00:00 [info] <0.222.0>  cookie hash    : dw5XV6bWOUm3+unVnJBRhw==
d_rabbitmq  | 2023-12-30 08:00:37.247784+00:00 [info] <0.222.0>  log(s)         : /var/log/rabbitmq/rabbit@892990533f7a_upgrade.log
d_rabbitmq  | 2023-12-30 08:00:37.247784+00:00 [info] <0.222.0>                 : <stdout>
d_rabbitmq  | 2023-12-30 08:00:37.247784+00:00 [info] <0.222.0>  database dir   : /var/lib/rabbitmq/mnesia/rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:37.384276+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:37.384342+00:00 [info] <0.222.0> Feature flags:   [ ] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:37.384355+00:00 [info] <0.222.0> Feature flags:   [ ] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:37.384365+00:00 [info] <0.222.0> Feature flags:   [ ] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:37.384395+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:37.384405+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:37.384412+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:37.384420+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:37.384458+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:37.384483+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.004359+00:00 [info] <0.222.0> Running boot step pre_boot defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.004418+00:00 [info] <0.222.0> Running boot step rabbit_global_counters defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.004814+00:00 [info] <0.222.0> Running boot step rabbit_osiris_metrics defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.004891+00:00 [info] <0.222.0> Running boot step rabbit_core_metrics defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.005486+00:00 [info] <0.222.0> Running boot step rabbit_alarm defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.008007+00: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.010387+00:00 [info] <0.290.0> Enabling free disk space monitoring
d_rabbitmq  | 2023-12-30 08:00:39.010418+00:00 [info] <0.290.0> Disk free limit set to 50MB
d_rabbitmq  | 2023-12-30 08:00:39.012262+00:00 [info] <0.222.0> Running boot step code_server_cache defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.012333+00:00 [info] <0.222.0> Running boot step file_handle_cache defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.012514+00:00 [info] <0.293.0> Limiting to approx 1048479 file handles (943629 sockets)
d_rabbitmq  | 2023-12-30 08:00:39.012642+00:00 [info] <0.294.0> FHC read buffering: OFF
d_rabbitmq  | 2023-12-30 08:00:39.012686+00:00 [info] <0.294.0> FHC write buffering: ON
d_rabbitmq  | 2023-12-30 08:00:39.013057+00:00 [info] <0.222.0> Running boot step worker_pool defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.013112+00:00 [info] <0.279.0> Will use 16 processes for default worker pool
d_rabbitmq  | 2023-12-30 08:00:39.013129+00:00 [info] <0.279.0> Starting worker pool 'worker_pool' with 16 processes in it
d_rabbitmq  | 2023-12-30 08:00:39.013989+00:00 [info] <0.222.0> Running boot step database defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.014230+00:00 [info] <0.222.0> Node database directory at /var/lib/rabbitmq/mnesia/rabbit@892990533f7a is empty. Assuming we need to join an existing cluster or initialise from scratch...
d_rabbitmq  | 2023-12-30 08:00:39.014286+00:00 [info] <0.222.0> Configured peer discovery backend: rabbit_peer_discovery_classic_config
d_rabbitmq  | 2023-12-30 08:00:39.014305+00: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.014366+00:00 [info] <0.222.0> All discovered existing cluster peers:
d_rabbitmq  | 2023-12-30 08:00:39.014401+00: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.015937+00:00 [noti] <0.44.0> Application mnesia exited with reason: stopped
d_rabbitmq  | 2023-12-30 08:00:39.081730+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 9 retries left
d_rabbitmq  | 2023-12-30 08:00:39.081850+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.088999+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 9 retries left
d_rabbitmq  | 2023-12-30 08:00:39.089061+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.089088+00:00 [info] <0.222.0> Feature flag `drop_unroutable_metric`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.089201+00:00 [info] <0.222.0> Feature flag `drop_unroutable_metric`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.089744+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.089791+00:00 [info] <0.222.0> Feature flags:   [~] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.089806+00:00 [info] <0.222.0> Feature flags:   [ ] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.089816+00:00 [info] <0.222.0> Feature flags:   [ ] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.089824+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.089832+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.089839+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.089872+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.089882+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.089899+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.095985+00:00 [info] <0.222.0> Feature flag `drop_unroutable_metric`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.096903+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.096943+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.096959+00:00 [info] <0.222.0> Feature flags:   [ ] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.096969+00:00 [info] <0.222.0> Feature flags:   [ ] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.096995+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.097005+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.097012+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.097020+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.097055+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.097083+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.103271+00:00 [info] <0.222.0> Feature flag `empty_basic_get_metric`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.103371+00:00 [info] <0.222.0> Feature flag `empty_basic_get_metric`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.104171+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.104223+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.104242+00:00 [info] <0.222.0> Feature flags:   [~] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.104284+00:00 [info] <0.222.0> Feature flags:   [ ] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.104300+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.104310+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.104321+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.104332+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.104343+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.104363+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.110373+00:00 [info] <0.222.0> Feature flag `empty_basic_get_metric`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.112267+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.112303+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.112324+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.112334+00:00 [info] <0.222.0> Feature flags:   [ ] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.112355+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.112367+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.112375+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.112382+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.112391+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.112399+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.119750+00:00 [info] <0.222.0> Feature flag `implicit_default_bindings`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.119939+00:00 [info] <0.222.0> Feature flag `implicit_default_bindings`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.121166+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.121204+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.121220+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.121258+00:00 [info] <0.222.0> Feature flags:   [~] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.121279+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.121289+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.121354+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.121368+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.121376+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.121384+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.127174+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 0 retries left
d_rabbitmq  | 2023-12-30 08:00:39.127322+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.127367+00:00 [info] <0.222.0> Feature flag `implicit_default_bindings`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.129376+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.129440+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.129459+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.129472+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.129496+00:00 [info] <0.222.0> Feature flags:   [ ] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.129512+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.129523+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.129534+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.129557+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.129583+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.135071+00:00 [info] <0.222.0> Feature flag `maintenance_mode_status`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.135142+00:00 [info] <0.222.0> Feature flag `maintenance_mode_status`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.135868+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.135900+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.135920+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.135952+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.135972+00:00 [info] <0.222.0> Feature flags:   [~] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.135983+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.135990+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.135999+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.136006+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.136013+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.141870+00: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.145109+00:00 [info] <0.222.0> Feature flag `maintenance_mode_status`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.147259+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.147315+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.147335+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.147345+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.147373+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.147393+00:00 [info] <0.222.0> Feature flags:   [ ] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.147404+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.147412+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.147440+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.147462+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.152954+00:00 [info] <0.222.0> Feature flag `quorum_queue`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.153033+00:00 [info] <0.222.0> Feature flag `quorum_queue`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.153716+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.153766+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.153783+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.153808+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.153821+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.153829+00:00 [info] <0.222.0> Feature flags:   [~] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.153837+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.153859+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.153868+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.153890+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.158923+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 9 retries left
d_rabbitmq  | 2023-12-30 08:00:39.159030+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.159057+00:00 [info] <0.222.0> Feature flag `quorum_queue`:   migrating Mnesia table rabbit_queue...
d_rabbitmq  | 2023-12-30 08:00:39.169647+00:00 [info] <0.222.0> Feature flag `quorum_queue`:   migrating Mnesia table rabbit_durable_queue...
d_rabbitmq  | 2023-12-30 08:00:39.180353+00:00 [info] <0.222.0> Feature flag `quorum_queue`:   Mnesia tables migration done
d_rabbitmq  | 2023-12-30 08:00:39.180398+00:00 [info] <0.222.0> Feature flag `quorum_queue`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.182022+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.182050+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.182062+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.182071+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.182119+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.182143+00:00 [info] <0.222.0> Feature flags:   [x] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.182155+00:00 [info] <0.222.0> Feature flags:   [ ] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.182189+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.182242+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.182257+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.188097+00:00 [info] <0.222.0> Feature flag `stream_queue`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.188195+00:00 [info] <0.222.0> Feature flag `stream_queue`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.189025+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.189057+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.189078+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.189105+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.189122+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.189132+00:00 [info] <0.222.0> Feature flags:   [x] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.189146+00:00 [info] <0.222.0> Feature flags:   [~] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.189153+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.189160+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.189168+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.194781+00:00 [info] <0.222.0> Feature flag `stream_queue`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.196539+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.196589+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.196605+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.196614+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.196644+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.196655+00:00 [info] <0.222.0> Feature flags:   [x] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.196663+00:00 [info] <0.222.0> Feature flags:   [x] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.196684+00:00 [info] <0.222.0> Feature flags:   [ ] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.196718+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.196737+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.202944+00:00 [info] <0.222.0> Feature flag `user_limits`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.203087+00:00 [info] <0.222.0> Feature flag `user_limits`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.203820+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.203867+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.203891+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.203901+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.203909+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.203932+00:00 [info] <0.222.0> Feature flags:   [x] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.203942+00:00 [info] <0.222.0> Feature flags:   [x] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.203950+00:00 [info] <0.222.0> Feature flags:   [~] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.203957+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.203967+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.210370+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 9 retries left
d_rabbitmq  | 2023-12-30 08:00:39.210569+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.222439+00:00 [info] <0.222.0> Feature flag `user_limits`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.224371+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.224401+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.224427+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.224436+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.224474+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.224485+00:00 [info] <0.222.0> Feature flags:   [x] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.224493+00:00 [info] <0.222.0> Feature flags:   [x] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.224524+00:00 [info] <0.222.0> Feature flags:   [x] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.224537+00:00 [info] <0.222.0> Feature flags:   [ ] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.224546+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.230739+00:00 [info] <0.222.0> Feature flag `virtual_host_metadata`: supported, attempt to enable...
d_rabbitmq  | 2023-12-30 08:00:39.230830+00:00 [info] <0.222.0> Feature flag `virtual_host_metadata`: mark as enabled=state_changing
d_rabbitmq  | 2023-12-30 08:00:39.231752+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.231790+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.231809+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.231844+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.231865+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.231875+00:00 [info] <0.222.0> Feature flags:   [x] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.231902+00:00 [info] <0.222.0> Feature flags:   [x] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.231918+00:00 [info] <0.222.0> Feature flags:   [x] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.231927+00:00 [info] <0.222.0> Feature flags:   [~] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.231935+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.237305+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 9 retries left
d_rabbitmq  | 2023-12-30 08:00:39.237434+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.249094+00:00 [info] <0.222.0> Feature flag `virtual_host_metadata`: mark as enabled=true
d_rabbitmq  | 2023-12-30 08:00:39.250829+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
d_rabbitmq  | 2023-12-30 08:00:39.250873+00:00 [info] <0.222.0> Feature flags:   [x] drop_unroutable_metric
d_rabbitmq  | 2023-12-30 08:00:39.250892+00:00 [info] <0.222.0> Feature flags:   [x] empty_basic_get_metric
d_rabbitmq  | 2023-12-30 08:00:39.250904+00:00 [info] <0.222.0> Feature flags:   [x] implicit_default_bindings
d_rabbitmq  | 2023-12-30 08:00:39.250928+00:00 [info] <0.222.0> Feature flags:   [x] maintenance_mode_status
d_rabbitmq  | 2023-12-30 08:00:39.250944+00:00 [info] <0.222.0> Feature flags:   [x] quorum_queue
d_rabbitmq  | 2023-12-30 08:00:39.250955+00:00 [info] <0.222.0> Feature flags:   [x] stream_queue
d_rabbitmq  | 2023-12-30 08:00:39.250966+00:00 [info] <0.222.0> Feature flags:   [x] user_limits
d_rabbitmq  | 2023-12-30 08:00:39.250990+00:00 [info] <0.222.0> Feature flags:   [x] virtual_host_metadata
d_rabbitmq  | 2023-12-30 08:00:39.251028+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
d_rabbitmq  | 2023-12-30 08:00:39.257508+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 9 retries left
d_rabbitmq  | 2023-12-30 08:00:39.257675+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.266516+00:00 [info] <0.222.0> Waiting for Mnesia tables for 30000 ms, 9 retries left
d_rabbitmq  | 2023-12-30 08:00:39.266671+00:00 [info] <0.222.0> Successfully synced tables from a peer
d_rabbitmq  | 2023-12-30 08:00:39.266703+00: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.266729+00: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.266782+00:00 [info] <0.222.0> Running boot step database_sync defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.266839+00:00 [info] <0.222.0> Running boot step feature_flags defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.266939+00:00 [info] <0.222.0> Running boot step codec_correctness_check defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.266972+00:00 [info] <0.222.0> Running boot step external_infrastructure defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.266993+00:00 [info] <0.222.0> Running boot step rabbit_registry defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267081+00: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.267249+00:00 [info] <0.222.0> Running boot step rabbit_queue_location_random defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267305+00:00 [info] <0.222.0> Running boot step rabbit_event defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267460+00:00 [info] <0.222.0> Running boot step rabbit_auth_mechanism_amqplain defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267551+00:00 [info] <0.222.0> Running boot step rabbit_auth_mechanism_plain defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267601+00:00 [info] <0.222.0> Running boot step rabbit_exchange_type_direct defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267675+00:00 [info] <0.222.0> Running boot step rabbit_exchange_type_fanout defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267729+00:00 [info] <0.222.0> Running boot step rabbit_exchange_type_headers defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267826+00:00 [info] <0.222.0> Running boot step rabbit_exchange_type_topic defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.267923+00: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.267983+00: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.268049+00: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.268121+00:00 [info] <0.222.0> Running boot step rabbit_priority_queue defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.268148+00:00 [info] <0.222.0> Priority queues enabled, real BQ is rabbit_variable_queue
d_rabbitmq  | 2023-12-30 08:00:39.268206+00: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.268258+00: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.268314+00:00 [info] <0.222.0> Running boot step kernel_ready defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.268358+00:00 [info] <0.222.0> Running boot step rabbit_sysmon_minder defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.268484+00:00 [info] <0.222.0> Running boot step rabbit_epmd_monitor defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.269275+00:00 [info] <0.567.0> epmd monitor knows us, inter-node communication (distribution) port: 25672
d_rabbitmq  | 2023-12-30 08:00:39.269370+00:00 [info] <0.222.0> Running boot step guid_generator defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.271310+00:00 [info] <0.222.0> Running boot step rabbit_node_monitor defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.271450+00:00 [info] <0.571.0> Starting rabbit_node_monitor
d_rabbitmq  | 2023-12-30 08:00:39.271613+00:00 [info] <0.222.0> Running boot step delegate_sup defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.272186+00:00 [info] <0.222.0> Running boot step rabbit_memory_monitor defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.272402+00:00 [info] <0.222.0> Running boot step core_initialized defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.272424+00:00 [info] <0.222.0> Running boot step upgrade_queues defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.277562+00:00 [info] <0.222.0> message_store upgrades: 1 to apply
d_rabbitmq  | 2023-12-30 08:00:39.277641+00: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.277747+00:00 [info] <0.222.0> message_store upgrades: No durable queues found. Skipping message store migration
d_rabbitmq  | 2023-12-30 08:00:39.277799+00:00 [info] <0.222.0> message_store upgrades: Removing the old message store data
d_rabbitmq  | 2023-12-30 08:00:39.278413+00:00 [info] <0.222.0> message_store upgrades: All upgrades applied successfully
d_rabbitmq  | 2023-12-30 08:00:39.283744+00:00 [info] <0.222.0> Running boot step channel_tracking defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.286524+00:00 [info] <0.222.0> Setting up a table for channel tracking on this node: tracked_channel_on_node_rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:39.289083+00:00 [info] <0.222.0> Setting up a table for channel tracking on this node: tracked_channel_table_per_user_on_node_rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:39.289218+00:00 [info] <0.222.0> Running boot step rabbit_channel_tracking_handler defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.289267+00:00 [info] <0.222.0> Running boot step connection_tracking defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.292118+00:00 [info] <0.222.0> Setting up a table for connection tracking on this node: tracked_connection_on_node_rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:39.294888+00:00 [info] <0.222.0> Setting up a table for per-vhost connection counting on this node: tracked_connection_per_vhost_on_node_rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:39.297384+00:00 [info] <0.222.0> Setting up a table for per-user connection counting on this node: tracked_connection_table_per_user_on_node_rabbit@892990533f7a
d_rabbitmq  | 2023-12-30 08:00:39.297633+00:00 [info] <0.222.0> Running boot step rabbit_connection_tracking_handler defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.297685+00:00 [info] <0.222.0> Running boot step rabbit_exchange_parameters defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.297732+00:00 [info] <0.222.0> Running boot step rabbit_mirror_queue_misc defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.298119+00:00 [info] <0.222.0> Running boot step rabbit_policies defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.298396+00:00 [info] <0.222.0> Running boot step rabbit_policy defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.298502+00:00 [info] <0.222.0> Running boot step rabbit_queue_location_validator defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.298572+00:00 [info] <0.222.0> Running boot step rabbit_quorum_memory_manager defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.298646+00:00 [info] <0.222.0> Running boot step rabbit_stream_coordinator defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.298831+00:00 [info] <0.222.0> Running boot step rabbit_vhost_limit defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.298921+00: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.299035+00: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.299084+00:00 [info] <0.222.0> Management plugin: using rates mode 'basic'
d_rabbitmq  | 2023-12-30 08:00:39.299507+00:00 [info] <0.222.0> Running boot step recovery defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.300340+00:00 [info] <0.222.0> Running boot step empty_db_check defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.300377+00:00 [info] <0.222.0> Will seed default virtual host and user...
d_rabbitmq  | 2023-12-30 08:00:39.300450+00:00 [info] <0.222.0> Adding vhost '/' (description: 'Default virtual host', tags: [])
d_rabbitmq  | 2023-12-30 08:00:39.312798+00:00 [info] <0.632.0> Making sure data directory '/var/lib/rabbitmq/mnesia/rabbit@892990533f7a/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L' for vhost '/' exists
d_rabbitmq  | 2023-12-30 08:00:39.313829+00:00 [info] <0.632.0> Setting segment_entry_count for vhost '/' with 0 queues to '2048'
d_rabbitmq  | 2023-12-30 08:00:39.316250+00:00 [info] <0.632.0> Starting message stores for vhost '/'
d_rabbitmq  | 2023-12-30 08:00:39.316398+00: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.317628+00:00 [info] <0.632.0> Started message store of type transient for vhost '/'
d_rabbitmq  | 2023-12-30 08:00:39.317738+00: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.318331+00:00 [warn] <0.640.0> Message store "628WB79CIFDYO9LJI6DKMI09L/msg_store_persistent": rebuilding indices from scratch
d_rabbitmq  | 2023-12-30 08:00:39.318989+00:00 [info] <0.632.0> Started message store of type persistent for vhost '/'
d_rabbitmq  | 2023-12-30 08:00:39.319124+00:00 [info] <0.632.0> Recovering 0 queues of type rabbit_classic_queue took 4ms
d_rabbitmq  | 2023-12-30 08:00:39.319155+00:00 [info] <0.632.0> Recovering 0 queues of type rabbit_quorum_queue took 0ms
d_rabbitmq  | 2023-12-30 08:00:39.319173+00:00 [info] <0.632.0> Recovering 0 queues of type rabbit_stream_queue took 0ms
d_rabbitmq  | 2023-12-30 08:00:39.321783+00:00 [info] <0.222.0> Created user 'guest'
d_rabbitmq  | 2023-12-30 08:00:39.323226+00:00 [info] <0.222.0> Successfully set user tags for user 'guest' to [administrator]
d_rabbitmq  | 2023-12-30 08:00:39.324767+00:00 [info] <0.222.0> Successfully set permissions for 'guest' in virtual host '/' to '.*', '.*', '.*'
d_rabbitmq  | 2023-12-30 08:00:39.324810+00:00 [info] <0.222.0> Running boot step rabbit_looking_glass defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.324851+00:00 [info] <0.222.0> Running boot step rabbit_core_metrics_gc defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.324964+00:00 [info] <0.222.0> Running boot step background_gc defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.325133+00:00 [info] <0.222.0> Running boot step routing_ready defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.325173+00:00 [info] <0.222.0> Running boot step pre_flight defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.325195+00:00 [info] <0.222.0> Running boot step notify_cluster defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.325246+00:00 [info] <0.222.0> Running boot step networking defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.325284+00:00 [info] <0.222.0> Running boot step definition_import_worker_pool defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.325352+00:00 [info] <0.279.0> Starting worker pool 'definition_import_pool' with 16 processes in it
d_rabbitmq  | 2023-12-30 08:00:39.326193+00:00 [info] <0.222.0> Running boot step cluster_name defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.326259+00:00 [info] <0.222.0> Initialising internal cluster ID to 'rabbitmq-cluster-id-YZ_t6O--WTeTPXS7viBMPg'
d_rabbitmq  | 2023-12-30 08:00:39.327743+00:00 [info] <0.222.0> Running boot step direct_client defined by app rabbit
d_rabbitmq  | 2023-12-30 08:00:39.327854+00: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.327961+00:00 [info] <0.685.0> Resetting node maintenance status
d_rabbitmq  | 2023-12-30 08:00:39.337368+00:00 [info] <0.744.0> Management plugin: HTTP (non-TLS) listener started on port 15672
d_rabbitmq  | 2023-12-30 08:00:39.337453+00:00 [info] <0.772.0> Statistics database started.
d_rabbitmq  | 2023-12-30 08:00:39.337507+00:00 [info] <0.771.0> Starting worker pool 'management_worker_pool' with 3 processes in it
d_rabbitmq  | 2023-12-30 08:00:39.342158+00:00 [info] <0.786.0> Prometheus metrics: HTTP (non-TLS) listener started on port 15692
d_rabbitmq  | 2023-12-30 08:00:39.342237+00:00 [info] <0.685.0> Ready to start client connection listeners
d_rabbitmq  | 2023-12-30 08:00:39.343416+00:00 [info] <0.830.0> started TCP listener on [::]:5672
d_rabbitmq  |  completed with 4 plugins.
d_rabbitmq  | 2023-12-30 08:00:39.391629+00:00 [info] <0.685.0> Server startup complete; 4 plugins started.
d_rabbitmq  | 2023-12-30 08:00:39.391629+00:00 [info] <0.685.0>  * rabbitmq_prometheus
d_rabbitmq  | 2023-12-30 08:00:39.391629+00:00 [info] <0.685.0>  * rabbitmq_management
d_rabbitmq  | 2023-12-30 08:00:39.391629+00:00 [info] <0.685.0>  * rabbitmq_web_dispatch
d_rabbitmq  | 2023-12-30 08:00:39.391629+00: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: "3"

services:
  consul-importer:
    image: consul-importer:1.0
    depends_on:
      - consul-dev
    networks:
      - microservices
  consul-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条目,进一步可以看到已加载的配置,如下所示:
8 容器化微服务,开发技术,微服务,容器化,Docker
接着向Docker Compose中添加前端定义,只需要添加基于Nginx构建的镜像,并公开重定向到内部端口的端口3000,默认情况下基本镜像的端口为80,可以更改公开的端口,但要相应地调整Gateway中的CORS配置,docker-compose.yml添加如下:

version: "3"

services:
  frontend:
    image: challenge-frontend:1.0
    ports:
      - '3000:80'
  consul-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_ACTIVE=docker来传递。

另外,在compose中配置Spring Boot容器时需要注意:

  • 不在localhost:8000上将后端服务直接公开给主机(Gateway服务除外),因此,不会将ports部分添加到Multiplication、Gamification和Logs服务中。
  • 对后端容器使用depends_on参数,以等待consul-importer运行,因此,在Spring Boot应用程序启动时,docker配置的Consul配置将可用。
  • 将rabbitmq作为这些服务的依赖项,但这不能保证RabbitMQ服务器在应用程序启动前就已准备就绪,但Spring Boot默认情况下会重试连接到服务器,系统最终将会稳定。

完整的配置如下:

version: "3"

services:
  frontend:
    image: challenge-frontend:1.0
    ports:
      - '3000:80'
  multiplication:
    image: multiplication:1.0.0
    environment:
      - SPRING_PROFILES_ACTIVE=docker
      - SPRING_CLOUD_CONSUL_HOST=consul
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysqlServer33106:3306/multiplication?useUnicode=true&characterEncoding=utf8
    depends_on:
      - rabbitmq-dev
      - consul-importer
      - mysql-server-dev
    networks:
      - microservices
  gamification:
    image: gamification:1.0.0
    environment:
      - SPRING_PROFILES_ACTIVE=docker
      - SPRING_CLOUD_CONSUL_HOST=consul
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysqlServer33106:3306/gamification?useUnicode=true&characterEncoding=utf8
    depends_on:
      - rabbitmq-dev
      - consul-importer
      - mysql-server-dev
      - multiplication
    networks:
      - microservices
  gateway:
    image: gateway:1.0.0
    ports:
      - '8000:8000'
    environment:
      - SPRING_PROFILES_ACTIVE=docker
      - SPRING_CLOUD_CONSUL_HOST=consul
    depends_on:
      - rabbitmq-dev
      - consul-importer
    networks:
      - microservices
  logs:
    image: logs:1.0.0
    environment:
      - SPRING_PROFILES_ACTIVE=docker
      - SPRING_CLOUD_CONSUL_HOST=consul
    depends_on:
      - rabbitmq-dev
      - consul-importer
    networks:
      - microservices
  consul-importer:
    image: consul-importer:1.0
    depends_on:
      - consul-dev
    networks:
      - microservices
  consul-dev:
    image: consul:1.11.1
    container_name: consul
    ports:
      - '8500:8500'
      - '8600:8600/udp'
    command: 'agent -dev -node=learnmicro -client=0.0.0.0 -log-level=INFO'
    networks:
      - microservices
  rabbitmq-dev:
    image: rabbitmq:management
    container_name: rabbitmq
    ports:
      - '5672:5672'
      - '15672:15672'
    networks:
      - microservices
  mysql-server-dev:
    image: mysql
    container_name: mysqlServer33106
    privileged: true
    volumes:
      - Z:\_Docker\mysql\data:/var/lib/mysql
      - Z:\_Docker\mysql\conf:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    ports:
      - '33106:3306'
    networks:
      - microservices


networks:
  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了,如下所示:
8 容器化微服务,开发技术,微服务,容器化,Docker
点击一项服务(如multiplication),可以看到docker网络中容器的地址,如图所示:
8 容器化微服务,开发技术,微服务,容器化,Docker
使用浏览器访问http://localhost:3000/,就可以使用应用程序了,如下所示:
8 容器化微服务,开发技术,微服务,容器化,Docker

数据持久化,应该考虑添加卷来存储数据库文件。

使用Docker扩展系统

使用docker compose,还可以使用单个命令来扩展服务。
首先,启动系统(docker-compose up),然后,从另一个终端再次运行带有scale参数的命令,指出服务名称和希望获取的实例数,可在单个命令中多次使用scale参数,如下所示:

> docker-compose up --scale multiplication=2 --scale gamification=2

现在,查看终端日志,就可以看到Docker Compose为multiplication和gamification服务启动了额外的实例,也可以在Consul服务中看到,如下所示:
8 容器化微服务,开发技术,微服务,容器化,Docker
从Consul中可以看到其中的变化,借助Consul发现、网关模式、Spring Cloud负载均衡器和RabbitMQ消费者的负载均衡,系统会再次在多个实例之间适当地负载均衡,可使用HTTPie命令来进行尝试:

> http POST :8000/attempts factorA=50 factorB=60 userAlias=noise10 guess=3000

在日志中可以看到实例如何处理来自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容器集群的快速编排,这样使多个容器相互配合来完成整个应用系统,可以轻松、高效的管理容器,提高效率。文章来源地址https://www.toymoban.com/news/detail-820120.html

到了这里,关于8 容器化微服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 抖音seo源码开发,技术交付及故障。服务等响应

    抖音seo源码开发、抖音seo源码部署、抖音seo源码开源交付及故障响应 抖音SEO主要是指通过一系列优化措施,提高抖音短视频在抖音搜索结果页的排名,从而增加短视频曝光量和观看量的过程。SEO的实现需要涉及多个方面,包括视频标签、内容、更新频率、粉丝互动等等。 在

    2024年02月06日
    浏览(36)
  • 阿里、百度等大厂技术面试题汇总,音视频服务器开发框架

    一面(104min) 自我介绍。 线程和进程的区别。 线程安全。面试官追问是否了解volite,小金忘了没回答出来。面试官追问是否了解自旋锁,乐观锁,悲观锁等,小金回答了解但是没用过。 http是用什么实现的。 TCP和UDP的区别。 TCP为什么是可靠的。注意拥塞机制涉及的算

    2024年04月15日
    浏览(78)
  • AI 时代,程序员无需焦虑 | 《服务端开发:技术、方法与实用解决方案》

    ChatGPT 横空出世后,“AI 即将取代程序员” 的观点一度引发热议,至今尚未完全冷却。作为一名服务端开发工程师,同时也是 ChatGPT 的“忠实”用户,经过将近一年的使用,今天抽空写一篇文章,谈谈自己对“AI 时代,程序员何去何从?”这一问题的看法。 2022 年 11 月 30 日

    2024年02月04日
    浏览(69)
  • Spring Cloud智慧工地源码,利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术开发,微服务架构

    智慧工地系统 充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术,以PC端,移动端,设备端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳务、设备、物料、安全、环境、能源、资料、计划、质量、视频监控等十大管理环节变得

    2024年02月05日
    浏览(56)
  • 强推Linux高性能服务器编程, 真的是后端开发技术提升, 沉淀自身不容错过的一本经典书籍

    目录 第1章 TCP/IP协议 1.1 TCP/IP协议族体系结构以及主要协议 1.1.1 数据链路层 1.1.2 网络层 1.1.3 传输层 1.1.4 应用层 1.2 封装 1.3 分用 1.5 ARP协议工作原理 1.5.1 以太网ARP请求/应答报文详解 1.5.2 ARP高速缓存的查看和修改 1.5.3 使用tcpdump观察ARP通信过程所得结果如下 本篇核心关键所在

    2024年02月07日
    浏览(50)
  • Linux与C/C++服务器开发:深入探索网络编程与实用技术(文末送书)

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 书籍推荐 🌄 莫道桑榆晚,为霞尚满天! 本文将探讨构建高性能Linux C/C++服务器的关键技术和最佳实践,包括优化服务器性能、处理并发和并行性、高效管理内存,以及利用高级网络功能等。我们还将推荐一本相关的书籍《Linux C/C++服务

    2024年02月04日
    浏览(46)
  • UWB高精度人员定位系统源码,微服务+java+ spring boot+ vue+ mysql技术开发

    工业物联网感知预警体系,大中小企业工业数字化转型需求的工业互联网平台 工厂人员定位系统是指能够对工厂中的人员、车辆、设备等进行定位,实现对人员和车辆的实时监控与调度的系统,是智慧工厂建设中必不可少的一环。由于工厂的工作环境比较复杂,如果管理不当

    2024年02月11日
    浏览(58)
  • AI 时代,程序员无需焦虑 | 《服务端开发:技术、方法与实用解决方案》(文末送书福利4.0)

    ChatGPT 横空出世后,“AI 即将取代程序员” 的观点一度引发热议,至今尚未完全冷却。作为一名服务端开发工程师,同时也是 ChatGPT 的“忠实”用户,经过将近一年的使用,今天抽空写一篇文章,谈谈自己对“AI 时代,程序员何去何从?”这一问题的看法。 2022 年 11 月 30 日

    2024年02月11日
    浏览(62)
  • Web端服务器推送技术原理分析及dwr框架简单的使用,html5移动web开发

    缺点  : a) 糟糕的用户体验 b) 对服务器的压力很大,并且造成带宽的极大浪费。 2.2 Ajax 轮询 Ajax隔一段时间(通常使用JavaScript的setTimeout函数)就去服务器查询是否有改变,从而进行增量式的更新。但是间隔多长时间去查询成了问题,因为性能和即时性造成了严重的反比

    2024年04月16日
    浏览(52)
  • Docker容器与虚拟化技术:Docker consul 实现服务注册与发现

    目录 一、理论 1.Docker consul 二、实验 1.consul部署 2. consul-template部署 三、总结 (1)服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包