首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Docker中通过Nginx将mqtt.js客户端连接到Mosca Broker (相同的Docker-compose)

在Docker中通过Nginx将mqtt.js客户端连接到Mosca Broker (相同的Docker-compose)
EN

Stack Overflow用户
提问于 2018-05-30 23:54:50
回答 1查看 561关注 0票数 0

我有:

  • 1 MongoDB
  • 2 Mqtt Mosca Broker
  • 2 NodeJS应用程序都带有mqtt.js cient
  • 1 ngnix

<代码>F29

Nginx负载平衡和proxy_pass分别到NodeJS应用程序和mqtt Mosca Broker,

所以我有:

mqtt传感器-> nginx -> Mqtt Mosca Broker "flow“正常工作

浏览器-> nginx -> NodeJS应用“流程正常”

我不能做的是让NodeJS应用程序(mqtt.js客户端部分)通过nginx连接到Mqtt Mosca Broker,比如:

NodeJS (mqtt.js客户端) -> nginx -> Mqtt Mosca Broker。

奇怪的是,如果我尝试:

NodeJS (mqtt.js客户端) -> Mqtt Mosca代理流程正常工作

我有以下配置:

docker-compose.yml

代码语言:javascript
复制
     nginx:
      build: ./nginx
      links:
        - app1:app1
        - app2:app2
        - mqttbroker1:mqttbroker1
        - mqttbroker2:mqttbroker2
      ports:
        - "80:80"
        - "443:443"
        - "1883:18833"
    app1:
      build: ./node_app
      links:
        - mongo:mongo
        - mqttbroker1:mqttbroker1
        - mqttbroker2:mqttbroker2
      ports:
        - "3000"
      environment:
        - NODE_ENV=production
        - PORT=3000
    app2:
      build: ./node_app
      links:
        - mongo:mongo
        - mqttbroker1:mqttbroker1
        - mqttbroker2:mqttbroker2
      ports:
        - "3000"
      environment:
        - NODE_ENV=production
        - PORT=3000    
    mqttbroker1:
      build: ./node_broker
      links:
        - mongo:mongo
      ports:
        - "18831"
      environment:
        - NODE_ENV=production
    mqttbroker2:
      build: ./node_broker
      links:
        - mongo:mongo
      ports:
        - "18831"
      environment:
       - NODE_ENV=production
    mongo:
     container_name: mongo
     restart: always
     image: mongo
     volumes:
       - ./mongo/data:/data/db
     ports:
       - "27017:27017"

nginx.conf (节选)

代码语言:javascript
复制
    stream {
      upstream mqtt_cluster{

        server mqttbroker1:18831 max_fails=3 fail_timeout=30s;
        server mqttbroker2:18831 max_fails=3 fail_timeout=30s;
      }

      server {
        listen 18833; #mqtt continer prot mapped on std port (1883:18833)
        proxy_pass mqtt_cluster;
      }
}

基本上,如果在我使用的NodeJS应用程序中:

代码语言:javascript
复制
const mqttClient = mqtt.connect('mqtt://mqttbroker1:18831', { clientId: clientId });

它是有效的,但如果我试一下:

代码语言:javascript
复制
const mqttClient = mqtt.connect('mqtt://nginx:18833', { clientId: clientId });

什么都不能用,有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 06:28:09

我找到了一个使用docker-compose.yml的解决方案

我使用的不是link,而是depends_on网络

YML文件是:

代码语言:javascript
复制
version: '3'
services:
  nginx:
    build: ./nginx
    depends_on:
      - app1
      - app2
      - mqttbroker1
      - mqttbroker2
    ports:
      - "80:80"
      - "443:443"
      - "1883:1883"
    networks:
      main:
        aliases:
          - proxy
  app1:
    build: ./node_app
    depends_on:
      - mongo
      - mqttbroker1
      - mqttbroker2
    ports:
      - "3000"
    environment:
      - NODE_ENV=production
      - PORT=3000
    networks:
      main:
        aliases:
          - app1
  app2:
    build: ./node_app
    depends_on:
      - mongo
      - mqttbroker1
      - mqttbroker2
    ports:
      - "3000"
    environment:
      - NODE_ENV=production
      - PORT=3000
    networks:
      main:
        aliases:
          - app2
  mqttbroker1:
    build: ./node_broker
    depends_on:
      - mongo
    ports:
      - "18831"
    environment:
      - NODE_ENV=production
    networks:
      main:
        aliases:
          - mqttbroker1
  mqttbroker2:
    build: ./node_broker
    depends_on:
      - mongo
    ports:
      - "18831"
    environment:
      - NODE_ENV=production
    networks:
      main:
        aliases:
          - mqttbroker2
  mongo:
    container_name: mongo
    restart: always
    image: mongo
    volumes:
      - ./mongo/data:/data/db
    ports:
      - "27017:27017"
    networks:
      main:
        aliases:
          - mongo
networks:
  main:

我使用这个来通过mqtt连接:

代码语言:javascript
复制
const mqttClient = mqtt.connect('mqtt://proxy', { clientId: clientId });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50608967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档