簡體   English   中英

將 dockerized Spring boot 應用程序連接到 MQTT Mosquitto 代理

[英]Connecting dockerized Spring boot app to MQTT Mosquitto broker

希望有人可以幫助我解決這個問題。

我有一個使用 docker 運行的應用程序,名為“my-app”。 它連接到也在 docker 容器中運行的 MQTT Mosquitto 代理。 這是 docker-compose 文件:

  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto:2.0.14
    ports:
      - 1883:1883
      - 9001:9001
    volumes:
      - "./mosquitto/Broker.conf:/mosquitto/config/mosquitto.conf"
      - "./mosquitto/Password:/mosquitto/config/mosquitto.passwd"

  my-app:
    container_name: my-app
    image: data-provider:latest
    ports:
      - 8080:8080
    depends_on:
      - mosquitto
    networks:
      - my-app-network

我有一個代理的配置文件,其中包含以下內容:

listener 1883
password_file /mosquitto/config/mosquitto.passwd
allow_anonymous false

查看 mosquitto 容器日志文件,我可以看到它在運行 docker-compose 時啟動時沒有錯誤。

1658337045: mosquitto version 2.0.14 starting
1658337045: Config loaded from /mosquitto/config/mosquitto.conf.
1658337045: Opening ipv4 listen socket on port 1883.
1658337045: mosquitto version 2.0.14 running

但是,我的 Java 應用程序無法與 mosquitto 代理連接。 每當我嘗試發送要發布的消息時,都會收到以下錯誤:

Caused by: org.springframework.messaging.MessagingException: Failed to connect; nested exception is MqttException (0) - java.net.UnknownHostException: mosquitto

Java 代碼如下:

    @Value("${mqtt.url}")
    private String url;

    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        MqttConnectOptions options = new MqttConnectOptions();
        options.setServerURIs(new String[] { url });
        ...
        ...
        return factory;
    }

在屬性文件中:

mqtt.url = tcp://mosquitto:1883

如果我嘗試使用嵌入式 tomcat 服務器運行應用程序,並將 url 更改為 localhost:1883,那么一切都會正常工作:

1658338620: New connection from <ip>:59730 on port 1883.
1658338621: New client connected from <ip>:59730 as my-app.topic (p2, c1, k60, u'admin').

我認為我沒有以正確的方式公開 docker 主機容器 URL,但我嘗試了一些配置但沒有成功。 有誰知道我做錯了什么以及我需要在代理配置中更改什么?

PS:我正在使用 spring-integration-mqtt 5.5.10

提前致謝!

目前,您的mosquitto服務位於 Bridge 網絡上,而my-app位於my-app-network 因此,他們無法互相交談。 您需要將這兩種服務都放在一個網絡下。

mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto:2.0.14
    ports:
      - 1883:1883
      - 9001:9001
    volumes:
      - "./mosquitto/Broker.conf:/mosquitto/config/mosquitto.conf"
      - "./mosquitto/Password:/mosquitto/config/mosquitto.passwd"
    networks:
      - my-app-network

暫無
暫無

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

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