错误"/>
Node Js App 在工作 2 小时后出现 EADDRNOTAVAlL 错误
我有一个应用程序使用来自 Kafka 的数据并将其发送到名为 DB 的容器。程序启动后,它可能会工作 2 小时,然后它会向消费者提供 Axios 捕获:
Api error :connect:EADDRNOTAVAL:3002(这是数据库容器的端口)
有人知道为什么会这样吗?
我分享消费者,数据库功能代码以及数据库
index.js
文件
谢谢你的帮助
**消费者端代码**
import { Kafka } from "kafkajs";
import axios from "axios";
// Paketlerin nereden geldiğinin bilgisi
const clientId = "my-app";
// Cluster Hangi Porta Yollayacak
const brokers = ["kafka:9092"];
// Gonderilen Topic
const topic = ["Topic2", "Topic3"];
const kafka = new Kafka({ clientId, brokers });
const consumer = kafka.consumer({ groupId: clientId });
let buffer = [];
export const consume = async () => {
await consumer.connect();
await consumer.subscribe({ topics: ["Topic2", "Topic3"] });
await consumer.run({
autoCommitInterval: 500,
eachMessage: async ({ topic, partition, message }) => {
const pkg = JSON.parse(message.value);
if (buffer.length < 500) {
buffer.push(pkg);
}
},
});
};
setInterval(async () => {
const data = JSON.stringify(buffer);
buffer = [];
if (!data.length > 0) {
console.log("İşlenecek veri olmadıgı için veri işleme alınmadı ");
} else {
try {
await axios.post("http://db:3002/handle_data", data, {
headers: {
"Content-Type": "application/json",
},
});
data = [];
} catch (error) {
console.error(`API error:${error}`);
}
}
}, 200);
DB SIDE CODE 这边运行在端口 3002
index.js文件是:**
import { handle_data } from "./handle_data.js";
import express from "express";
//import sql from "mssql";
import { MongoClient } from "mongodb";
//const { MongoClient } = require("mongodb");
import cors from "cors";
const app = express();
app.use(cors());
app.use(express.json({ limit: "100mb" }));
app.post("/handle_data", handle_data);
app.listen(3002, () => {
console.log("DB SİDE İS ALLİVE ");
});
**
功能:**
import sql from "mssql";
export const handle_data = (req, res) => {
const dataArray = req.body;
if (dataArray.length > 0) {
bulkInsert(req.body);
} else {
console.log(
"Eklenecek Konum Verisi Olmadıgı İçin ekleme işlemi yapılamadı "
);
}
};
async function bulkInsert(data) {
const config = {
server: "A",
database: "A",
port: 1433,
user: "A",
password: "A",
options: {
trustServerCertificate: true,
encrypt: false,
},
};
try {
await sql.connect(config);
const table = new sql.Table("tblLocations");
table.create = false;
table.columns.add("TaskId", sql.BigInt);
table.columns.add("DoorNumber", sql.NVarChar(10));
table.columns.add("Latitude", sql.Float);
table.columns.add("Longitude", sql.Float);
table.columns.add("EmbeddedTime", sql.DateTime);
table.columns.add("HatKodu", sql.NVarChar(10));
table.columns.add("GuzergahKodu", sql.NVarChar(50));
data.forEach((location) => {
table.rows.add(
location.taskId,
location.doorNumber,
location.Latitude,
location.longitude,
location.embeddedTime,
location.hatKodu,
location.routeCode
);
});
const request = new sql.Request();
await request.bulk(table);
console.log(` ${data.length} Adet Veri Veritabanına Eklendi ...`);
} catch (err) {
console.log(`Data uzunlugu ::::::::::::::::: ${data.length}`);
console.error(err);
} finally {
}
}
回答如下:
更多推荐
Node Js App 在工作 2 小时后出现 EADDRNOTAVAlL 错误
发布评论