簡體   English   中英

RabbitMq Spring Boot 部署 docker

[英]RabbitMq Spring Boot deploy docker

我有一個帶有生產者和接收者的 Spring Boot 應用程序,它使用本地 rabbitmq 來發送和接收消息。 我正在嘗試在 docker 容器上部署應用程序和兔子,並在部署后運行啟動應用程序。 應用程序啟動后,它有一個生產者,它實現了 Spring CommandLineRunner,這意味着應用程序立即開始發送消息,因此必須先運行一個 rabbitmq 代理。 我對 docker 很陌生。 我到目前為止嘗試過:

1)。 我為 spring boot 應用程序創建了如下圖像

FROM java:8
EXPOSE 8080
ADD /target/MessagingApp.jar MessagingApp.jar
ENTRYPOINT ["java","-jar","MessagingApp.jar"]

2)。 然后為兔子和我新創建的圖像創建了 docker.compose 文件

rabbitmq:
  image: rabbitmq:management
  ports:
    - "5672:5672"
    - "15672:15672"
messagingapp:
  image: messagingapp:latest
  ports:
    - "80:8080"
  links:
    - rabbitmq

然后我運行了 docker-compose up,我可以看到 rabbit 開始進行一些擴展,然后 spring boot 應用程序但無法發送消息

at com.rabbitmq.client.impl.SocketFrameHandlerFactory.create..

我認為我的問題是我的 Spring Boot 應用程序會自動嘗試連接到 localhost rabbit 主機。 那么如何讓它指向 docker rabbitmq 服務器呢?

有什么幫助嗎?

嘗試更新depends_on部分links 您的應用程序可能在messagingapp之前啟動。

depends_on部分文檔

docker-compose up 將按依賴順序啟動服務。 當 docker-compose 執行 V2 文件時,它會自動在文件中定義的所有容器之間建立一個網絡,每個容器都可以立即使用 docker-compose.yml 文件中定義的名稱來引用其他容器。

注意:depends_on 不會等待 db 和 redis 在啟動 web 之前“准備好” - 只有在它們啟動之前。

對於該檢查Controlling startup order

您需要添加command來檢查服務狀態。 更多文檔...

depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]

你的 Dockerfile 和 docker-compose.yml 文件似乎是正確的,除了兩件事:

  1. 您需要使用depends_on而不是關鍵字links 這將首先構建和運行 RabbitMQ 實例,然后是您的 Web 服務。

  2. 你應該在你的消息應用服務下添加這一行:

-->

environment:
-  SPRING_RABBITMQ_HOST=rabbitmq

這將使您的 Spring Boot 應用程序能夠識別 Docker 中的 RabbitMQ 映像。

所以,試着像這樣更新你的 docker-compose.yml 文件:

rabbitmq:
  image: rabbitmq:management
  ports:
    - "5672:5672"
    - "15672:15672"
messagingapp:
  image: messagingapp:latest
  ports:
    - "80:8080"
  environment:
    - SPRING_RABBITMQ_HOST=rabbitmq
  depends_on:
    - rabbitmq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM