[英]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 文件似乎是正確的,除了兩件事:
您需要使用depends_on
而不是關鍵字links
。 這將首先構建和運行 RabbitMQ 實例,然后是您的 Web 服務。
你應該在你的消息應用服務下添加這一行:
-->
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.