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
中删除它,问题应该得到解决。
我有一个 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
中删除它,问题应该得到解决。