Spring 启动微服务无法连接到 Axon 服务器

Spring Boot Microservices are unable to connect to Axon Server

我有一个 Spring 启动微服务项目,其中包含三个微服务来测试分布式事务管理的 saga 模式。

当我 运行 Axon Server 在本地使用 java -jar axonserver.jar 和 spring 使用 mvn spring-boot:run 启动微服务时,一切正常,我可以在 Axon 中看到所有微服务服务器仪表板。

我已经添加 Docker 微服务文件和 docker-compose.yml 项目到 运行 整个项目 docker-compose。这是我的 docker-compose.yml 文件:

version: '3.8'

services:
  axonserver:
    image: axoniq/axonserver
    hostname: axonserver
    container_name: axonserver
    volumes:
      - type: bind
        source: ./data
        target: /data
      - type: bind
        source: ./events
        target: /eventdata
      - type: bind
        source: ./config
        target: /config
        read_only: true
    ports:
      - '8024:8024'
      - '8124:8124'
      - '8224:8224'
    networks:
      - axon-demo      

  order-service:
    container_name: "order-service"
    build:
      context: ./order-service
    ports:
      - "8080:8080"
    depends_on:
      - axonserver
    networks:
      - axon-demo      

  payment-service:
    container_name: "payment-service"
    build:
      context: ./payment-service
    ports:
      - "8081:8081"
    depends_on:
      - axonserver
    networks:
      - axon-demo      

  shipping-service:
    container_name: "shipping-service"
    build:
      context: ./shipping-service
    ports:
      - "8082:8082"
    depends_on:
      - axonserver
    networks:
      - axon-demo      

networks:
  axon-demo:
    driver: bridge 

我还将 axon-server 添加到所有微服务的 application.properties 中,如下所示:

axon.axonserver.servers=axonserver:8124

在 运行ning docker-compose up --build 命令后,微服务无法连接到 Axon 服务器,我收到此错误:

order-service       | 2021-07-10 15:01:01.199  WARN 1 --- [rverConnector-0] o.a.a.c.AxonServerConnectionManager      : Connecting to AxonServer node localhost:8124 failed: UNAVAILABLE: io exception

我的问题是为什么微服务在 localhost:8124 中寻找 axon 服务器,这显然是错误的并且违反了它们在 application.properties 中的配置:

axon.axonserver.servers=axonserver:8124

这里axonserver是Axon服务器的容器名

您的属性文件包含以下内容:

axon.axonserver.servers=${AXONSERVER_HOST:axonserver:8124}

请尝试去掉“:8124”:

axon.axonserver.servers=${AXONSERVER_HOST:axonserver}

我认为 Spring 引导被双“:”混淆了。端口 8124 是 Axon 服务器连接的默认端口,因此您可以毫无问题地保留它。

正如评论中所讨论的,问题出在您的 Dockerfile 上,您正在覆盖 spring.config.location。通过从 Dockerfile 中删除它,问题应该得到解决。