У меня есть:
- 1 MongoDB
- 2 Mqtt Mosca Brokers
- 2 NodeJS Приложение как с mqtt.js cient
- 1 ngnix
Балансировка нагрузки Nginx и proxy_pass для http и mqtt соответственно для приложений NodeJS и Mqtt Mosca Brokers,
, поэтому у меня есть:
mqtt Sensors ->nginx -> Mqtt Mosca Brokers «работает нормально»
Браузер -> nginx -> NodeJS Приложение «работает нормально»
Что я не могу сделать, это разрешить приложению NodeJS (Клиентская часть mqtt.js) подключается к Mqtt Mosca Brokers через nginx, что-то вроде:
NodeJS (клиент mqtt.js) -> nginx -> Mqtt Mosca Broker.
странная вещьчто если я попытаюсь:
NodeJS (клиент mqtt.js) -> Mqtt Mosca Broker, поток работает правильно
У меня есть следующая конфигурация:
docker-compose.yml
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 (отрывок)
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 я использую:
const mqttClient = mqtt.connect('mqtt://mqttbroker1:18831', { clientId: clientId });
это работает, но если я попробую:
const mqttClient = mqtt.connect('mqtt://nginx:18833', { clientId: clientId });
ничего не работает, кто-нибудь может помочь?